Crear documentos de Word con PHP y PHPWord

Bienvenido al blog de Parzibyte. Vas a encontrar tutoriales y tips de programación, bases de datos, redes, electrónica e informática general. Ejemplos de código, aplicaciones gratuitas y open source

Crear documentos de Word con PHP y PHPWord

Anteriormente en mi blog he escrito cómo crear y leer hojas de cálculo o documentos de Excel con PHP.

Hoy vamos a ver cómo crear documentos de Word (con extensión docx) en PHP, usando la librería PHPWord.

La librería de phpword permite varias cosas, y para comenzar veremos cómo:

  • Instalar la librería phpword usando composer (no hay pretexto para no usarlo en la actualidad)
  • Crear primer documento de Word, con propiedades, etiquetas, título, etcétera.
  • Agregar texto con distintas fuentes a documento de Word
  • Agregar títulos y alinear texto
  • Poner hipervínculos dentro de un documento de Word
  • Agregar saltos de línea y saltos de página
  • Guardar el documento de Word
  • Descargar el documento de Word

La librería permite más cosas, pero las veremos más tarde.

Instalar librería PHPWord

¿No has instalado Composer? aquí te digo cómo

Si ya cuentas con un proyecto, mira aquí cómo adaptarlo. En caso de que sea nuevo, inicia un proyecto con composer init.

1 – Iniciar proyecto si no existe

Ahora instala la librería con:

composer require phpoffice/phpword

2 – Instalar phpword y dependencias

Después de eso simplemente incluye el autoload:

require_once "vendor/autoload.php";

Estamos listos para comenzar.

Hola mundo con PHPWord

Para crear un documento de Word con PHP hay que crear una nueva instancia de la clase PhpOffice\PhpWord\PhpWord.

$documento = new \PhpOffice\PhpWord\PhpWord();

A ese documento se le pueden modificar las propiedades, agregar secciones, texto, imágenes, títulos, etcétera.

Para modificar las propiedades del documento hay que obtener a las mismas con $documento->getDocInfo() y luego modificarlas con métodos como setCreator, setLastModifiedBy, etcétera.

Cuando creamos el documento y lo abrimos (al menos con Microsoft Word), se abre en modo compatibilidad. Para evitarlo se utiliza:

$documento->getCompatibility()->setOoxmlVersion(15);

El idioma se establece creando una instancia de Language, la cual está en PhpOffice\PhpWord\Style\Language;

$documento->getSettings()->setThemeFontLang(new Language("ES-MX"));

En este caso le he puesto el idioma español de México.

Finalmente, para guardar el documento, se crea un escritor o writer y se llama al método save.

Como vamos a guardarlo en el disco duro, indicamos la ruta del documento de salida. Recuerda que el documento no debe estar abierto por otra aplicación durante la creación, y si ya existe, se sobrescribe.

Todo esto que explico ya no lo explicaré en los demás apartados, pero tenemos que hacerlo para establecer el idioma y guardar correctamente el documento.

Descargar documento

Si queremos forzar a su descarga a través del navegador en lugar de guardarlo dentro del disco duro hay que enviar algunos encabezados (parecidos a los que se envían con readfile) y en la ruta de salida indicar a php output:

Así tenemos dos opciones: guardarlo en el disco duro o enviarlo directamente de vuelta al usuario.

Agregar texto, hipervínculos y títulos al documento

Hasta el momento no hemos agregado contenido al documento, pero fue porque estaba explicando cómo es que funcionan las propiedades, el idioma y esas cosas.

Para agregar contenido se debe comenzar agregando una sección con:

$seccion = $documento->addSection();

Y a la sección se le puede agregar texto con addText. Esta función puede tomar varios parámetros pero aquí vemos dos (solo el primero es opcional), el texto y una fuente.

La fuente está representada por un arreglo que puede ser declarado con array o con [] usando la sintaxis corta.

También se puede agregar un hipervínculo con addLink($link, $titulo, $fuente).

Los títulos se agregan con addTitle($titulo, $profundidad) en donde la profundidad indica, si lo queremos ver así, el número de título. Por ejemplo, un subtítulo sería un título con profundidad de 2.

Para agregar estilos de títulos (y así todos los títulos con esa profundidad los tendrán) se llama al método addTitleStyle($profundidad, $fuente)

El código de arriba habrá generado un documento como el que se ve aquí.

Nota: los colores están especificados en hexadecimal.

Texto con estilo, textrun

Para agregar texto con distintos formatos (incluso imágenes) en el mismo párrafo y para alinear al mismo, se debe crear un textRun con addTextRun pasando como argumento el estilo de ese párrafo.

En este caso el alignment es en Jc::BOTH para que sea lo mismo que justify o justificado, la constante se encuentra en PhpOffice\PhpWord\SimpleType\Jc por eso se indica su uso al inicio.

El valor de lineHeight es la separación de líneas, entre mayor sea, más separación habrá.

Cuando tenemos el textRun se puede agregar texto normalmente, con addText, pasando una fuente personalizada si se desea.

Cada llamada a addText es como una concatenación, es decir, no se crea un nuevo párrafo, sino que se agrega.

También se pueden agregar saltos con addTextBreak, y claramente se pueden agregar los textRun que se necesiten, no hay límite.

Gracias al textRun se pueden agregar párrafos de texto en donde haya distintas fuentes y estilos.

El resultado del ejemplo se puede ver aquí. Y si te lo preguntas, el texto es de un post de un sistema de cotizaciones.

Saltos de línea y saltos de página

Para terminar este post (habrá todavía más) veamos cómo agregar separaciones entre párrafos o entre páginas.

Si queremos agregar un salto de línea lo hacemos con $seccion->addTextBreak() indicando el número de saltos.

Para agregar un salto de página llamamos a $seccion->addPageBreak(), podemos hacerlo dentro de un ciclo en caso de querer saltar muchas veces.

El documento creado se puede ver aquí.

Conclusión

Esta es la parte 1 de 3, en el siguiente post veremos cómo crear listas, tablas y agregar imágenes ya sea locales o de internet.

Por cierto, la documentación oficial está aquí.

Actualización: ya está aquí la parte 2.

 

Un comentario

  1. […] leer la primera parte para ver cómo instalar la librería y cómo agregar cosas […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: