Inicio » Artículos » Programación » PHP » Generar documentos de Word RTF con php

Suscríbete al boletín

Recibirás información detallada de nuestras ofertas, noticias, etc.

Suscríbete al boletín

Enviar a un amigo

Si crees que este Artículo le puede interesar a un amigo puedes enviarselo desde aquí.

Enviar a un amigo

Generar documentos de Word RTF con php

José Luis Del Rincón 25-01-2005

Origen del articulo:  http://www.adrformacion.com

Introducción.

En muchos desarrollos web surge la necesidad de crear documentos que proceden de la combinación de un documento origen con los datos almacenados en la Intranet/Extranet de la empresa, algo parecido a lo que se consigue con la combinación de correspondencia de Word.

Ejemplos prácticos pueden ser los siguientes:

  • Generación de etiquetas a partir de una base de datos de clientes o artículos
  • Certificados o diplomas para los alumnos de un curso
  • Listados de participantes en un evento.

El control de la impresión desde un documento HTML es algo bastante complejo, por lo que generar un documento DOC, o mejor dicho RTF, nos permitirá resolver nuestro problema de una manera muy efectiva.

En este artículo desarrollaremos un ejemplo práctico, el de obtener un certificado de asistencia para cada uno de los alumnos que asisten a un curso.

La estrategia.

Nuestra estrategia se fundamenta en los siguientes pasos:

  1. Partimos del documento en formato de Word que queremos obtener.
  2. Convertimos el formato .DOC en .RTF. (Los archivos .RTF son de texto legible)
  3. Introducimos en el documento .RTF unos códigos manuales que serán sustituidos por los datos procedentes de la base de datos.
  4. Creamos una aplicación en PHP que lea el archivo .RTF y sustituya los códigos introducidos por los datos buscados.

 Manos a la obra.

Primer paso. Preparar la plantilla.

Para nuestro ejemplo partimos de un documento .DOC que certifica que un alumno ha realizado un curso. En la siguiente imagen vemos un certificado tipo.

Será preciso crear un certificado para cada uno de los alumnos que ha realizado un curso, los datos que varía son los del alumno y los del curso realizado.

Una vez abierto el documento con Word, lo guardamos en formato RTF y sustituimos cada dato variable por unos códigos fácilmente reconocibles. Ojo, el formato RTF es muy puñetero, por lo que será preciso escribir los códigos sin confundirse para que no se introduzcan caracteres raros.

En el caso del ejemplo utilizamos la # y el * de tal manera que por ejemplo, sustituimos el nombre del alumno por #*NOMBRE*#

Guardaremos el documento con el nombre de plantilla.rtf

Segundo  paso. El programa PHP.

Crearemos dos funciones auxiliares, la primera se llama leef().

Esta función como se puede ver, recibe como argumento el nombre del fichero RTF, lo abre y almacena el contenido en la variable de texto $todo. Esta función por tanto devuelve el contenido de un fichero.

La siguiente función, rtf(), es la que crea un RTF a partir de una plantilla y sustituyendo los códigos por los datos de la Intranet.

Esta función recibe cuatro argumentos:

  1. $sql: la sentencia sql que devuelve los datos que se necesitan
  2. $plantilla: la plantilla RTF con los códigos
  3. $fsalida: el nombre del fichero resultado
  4. $matequivalencias: una matriz con las equivalencias entre los datos procedentes de la sentencia sql y los campos del certificado.

Vamos a comentar línea por línea el programa:

Las líneas 13 y 14 determinan el nombre y la ruta del fichero de salida, utilizamos la función time() para asegurarnos de que no se producirán dos ficheros con el mismo nombre.

En la línea 17 se almacena el contenido de la plantilla en la variable $txtplantilla

En las líneas de la 19 a la 24 se extrae el cuerpo del documento RTF, el cuerpo del documento es lo que se repite, para extraerlo primero obtenemos la cabecera del documento, la cabecera queda determinada por la etiqueta rtf sectd. Un documento rtf termina siempre en }, con esa información extraemos el cuerpo.

En el paso 3, a partir de la línea 26 vamos escribiendo el archivo resultado.

En la línea 27 escribimos la cabecera del documento

En la línea 28 ejecutamos la consulta y en la 29 entramos un un bucle, en cada ciclo obtendremos los datos de un alumno y crearemos un certificado.

En la línea 30 creamos una copia del cuerpo del documento llamada $despues, sobre esa copia realizaremos los cambios.

En la línea 31 entramos en un bucle que recorre la matriz de equivalencias, la línea 32 obtiene de la base de datos el dato, la línea 34 obtiene de la matriz el código a sustituir en la plantilla y la línea 35 sustituye el dato por el código.

Una vez sustituidos todos los campos la línea 37 escribe el certificado del alumno y las líneas 38 y 39 generan un salto de página para volver a escribir el siguiente certificado.

Una vez que hemos salido del While que va extrayendo los datos, la línea 41 cierra el documento rtf y la 42 la escritura del fichero.

Tercer  paso. Llamada a la función RTF.

Una vez hemos creado estas dos funciones ya podemos llamar a la función rtf() y generar el documento.

Comentamos las líneas:

En la línea 48 especificamos cual es la plantilla.

En la línea 49 establecemos la sentencia SQL que extrae los datos, en el caso del ejemplo es un poco compleja pues extrae los datos de varias tablas.

En las líneas desde la 50 a la 71 creamos la matriz de equivalencias, se trata de una matriz de dos dimensiones que relaciona el código que se encontrará en el archivo RTF con el campo de la sentencia SQL.

La línea 72 llama a la función rtf()

Y por fin las líneas 73 y 74 generan un enlace al archivo resultado.

 Mejoras y comentarios.

Todo en esta vida es susceptible de ser mejorado, en este caso me queda pendiente el generar el archivo de salida directamente al navegador, con el objeto de no tenerlo que escribir en el disco duro.

Además tenemos desarrollados ejemplos de listados y de etiquetas que podemos documentar en posteriores artículos.

Un aspecto importante para seguir progresando en este tema es conocer la sintaxis de los  documentos rtf, se trata de un trabajo un poco durillo que también podemos abordar en posteriores artículos.


* ¿Necesitas contenido? Puedes usar este artículo en tu web, o en tú boletín de correo. El único requisito es incluir la siguiente línea: "Artículo realizado por José Luis Del Rincón e incluir un enlace a www.adrformacion.com/catalogo.php?codcurso=PHP - Curso de php online".

Es muy bueno
dani09-11-2007

Es muy bueno, utili y sencillo.
Seguid así.

Generar documentos de Word RTF con php
asd05-09-2007

alert('ASD')

RE: Generar documentos de Word RTF con php
isaias02-03-2007

tengo php 5.2.0
que version utilizan ?????
es que me da error el php

RE: Generar documentos de Word RTF con php
Jack10-02-2007

Bueno, de echo muy bueno, pero por k carajos lo ponen como imagen, uno k lleva prisa y tengo k escribir todo el codigo renglon por renglon, eso me lleva minutos valiosos!!! de ahi en fuera muuy bueno

RE: Generar documentos de Word RTF con php
12-01-2007

Hola tengo un problema parecido solo que el mio es pasar todo el texto de una pagina web a Word a ver si me podian ayudar.

RE: Generar documentos de Word RTF con php
aLEX30-09-2006

Hola mi situacion es un poco parecida a la del articulo solo que en este caso quiero obtener un documento de word RTF y publicarlo en una pagina PHP mantieniendo el mismo formato como lo hace word.

es una portal para un periodico de la ciudad, donde el periodista redacte su articulo a su gusto en word con imagenes, Negrita, cursivas,columnas etc. etc. y cuando termine de editarlo con el simple hecho de guardarlo en la ruta www del APACHE, pues la web ya este publicada sin problemas. obvio voy a generar una pagina web que extraiga dicho archivo word.

todo esto es posible?? PHP me respeta el formato de word?? o tengo que hacer algunos malavares con el codigo PHP??

gjrkpocel ycwogdzu
gjrkpocel ycwogdzu31-08-2006

rtqko xbmvipatr usibonce zgknwhs leaxkbjoy dqjn cnvs

RE: Generar documentos de Word RTF con php
liz_gerik@hotmail.com07-07-2006

Hola a todos, yo tengo un problema similar, estoy haciendo un sistema de correspondencia en línea, donde el usuario ingresa todos los datos y éste le genera el documento en word, pero además se requiere que el contenido sea editado por el usuario, es decir, poner negrillas, itálicas, viñetas, etc. utilizando algún tipo de WYSIWYG. Al hacerlo con un javascript, me pasa el cuerpo de la correspondencia con los tags de html y no me respeta saltos de párrafo, negrillas ni nada por el estilo.

¿Alguien tiene idea de cómo puedo depurar estos códigos al pasarlos a una plantilla de word?

Saludos

RE: Generar documentos de Word RTF con php
Liz07-07-2006

Hola a todos, yo tengo un problema similar, estoy haciendo un sistema de correspondencia en línea, donde el usuario ingresa todos los datos y éste le genera el documento en word, pero además se requiere que el contenido sea editado por el usuario, es decir, poner negrillas, itálicas, viñetas, etc. utilizando algún tipo de WYSIWYG. Al hacerlo con un javascript, me pasa el cuerpo de la correspondencia con los tags de html y no me respeta saltos de párrafo, negrillas ni nada por el estilo.

¿Alguien tiene idea de cómo puedo depurar estos códigos al pasarlos a una plantilla de word?

Saludos

RE: Generar documentos de Word RTF con php
clopez@habitania.com06-07-2006

hola,
estoy intentando insertar una imagen en el RTF final, cuyo nombre extraigo de base de datos y además dicha imagen varía segun el usuario pero no he podido conseguirlo.
Alguien sabe cómo puedo hacerlo?

RE: Generar documentos de Word RTF con php
truchados05-05-2006

En cierta ocacion bajava de un bosque por la tarde cuando de pronto tome un enderiezo hacia mi casa pero cuando iba a medio camino vi una paresa que se besaba y se me ocurrio esconderme para observarlos era tras una casa grande el tipo empezo a besarla y la pelada estaba exitada empeso a gemir el tipo su mano en el trasero de ella cuando de pronto empeso a meter su mano por dentro de su falda y yo exitado como nunca porque nunca habia visto algo igual se podria decir era mi primera ves que vehia esa clase de cosas y segui observando derrepente el tipo creo que le metio un dedo digo creo por que no se vehia bien estaba lejos ellos no se percataron de mi presencia y me les acerque de pronto el tipo le levanto la falda, quito su bluza y bajo su tanguita empezo a morder sus pesones Y LUEGO BAJO HACIA SU VAGINA DONDE INTRODUJO SU LENGUA Y LE LAMIO EL CLITORIS

RE: Generar documentos de Word RTF con php
truchados05-05-2006

En cierta ocacion bajava de un bosque por la tarde cuando de pronto tome un enderiezo hacia mi casa pero cuando iba a medio camino vi una paresa que se besaba y se me ocurrio esconderme para observarlos era tras una casa grande el tipo empezo a besarla y la pelada estaba exitada empeso a gemir el tipo su mano en el trasero de ella cuando de pronto empeso a meter su mano por dentro de su falda y yo exitado como nunca porque nunca habia visto algo igual se podria decir era mi primera ves que vehia esa clase de cosas y segui observando derrepente el tipo creo que le metio un dedo digo creo por que no se vehia bien estaba lejos ellos no se percataron de mi presencia y me les acerque de pronto el tipo le levanto la falda, quito su bluza y bajo su tanguita empezo a morder sus pesones Y LUEGO BAJO HACIA SU VAGINA DONDE INTRODUJO SU LENGUA Y LE LAMIO EL CLITORIS

* Los comentarios son propiedad de quien los envió, adrformación no se hace responsable de su contenido.