En ocasiones en nuestras aplicaciones es necesario generar reportes en donde los resultados de una consulta a la base de datos se conviertan en un archivo PDF que permite una manipulación más fácil. PHP provee mecanismos para generar archivos PDF a partir de los datos de sus scripts.

En este post vamos a aprender paso a paso como generar archivos PDF a partir de scripts PHP y usando datos de consultas de MySQL.

Existe para PHP un pack en la red que tiene las dos clases indispensables para generar los archivos PDF y una carpeta con fuentes (fonts) para usar diferentes tipografías en los archivos generados. Este pack lo podemos obtener de la URL http://www.ros.co.nz/pdf/. Como primer paso entremos ahí y bajamos el archivo.

El archivo que se ha de descarga se llama pdfClassesAndFonts_009e.zip viene comprimido en formato ZIP por lo que hay que descomprimirlo y en seguida muestro el contenido:

De los archivos que se extraen, los importantes son el directorio “fonts” (que contiene las tipografías,  y el par de archivos de clase que son “class.ezpdf.php” y “class.pdf.php”. Estos archivos los tendremos que colocar en el directorio www para que el Wamp los pueda utilizar, es preferible meterlo cada vez en la carpeta de cada proyecto que tengamos, para no tener problema con la ruta de los archivos.

Una vez dicho esto, vamos a generar nuestro primer ejemplo, haremos un script PHP que este en la misma carpeta donde estén los archivos de clase y la carpeta de fuentes que descargamos, el código de este recién creado script es el siguiente:

Vamos a analizar el código línea a línea:

En la primer línea, iniciamos el script PHP con la instrucción <?php.

En la segunda línea incluimos uno de los archivos de clase que bajamos “class.ezpdf.php”, al hacer esto, todas las funciones contenidas en ese archivo de clase van a estar disponibles en nuestro nuevo script.

El la tercer línea con la instrucción $pdf=new Cezpdf(); estamos creando una variable u objeto llamada “$pdf” basada en una clase llamada Cezpdf. Esa variable recién creada hereda todos los métodos de dicha clase.

En la cuarta línea usamos un método de la variable recién creada, llamado SelectFont y le pasamos como argumento a dicho método la ruta donde está la fuente o tipografía que queremos utilizar. Hay que echar un vistazo dentro del directorio que descargamos “fonts” para ver las fuentes que tenemos disponibles para nuestros archivos PDF.

En la quinta, sexta y séptima línea usamos el método ezText, que nos permite poner cadenas de textos en el PDF, este método puede recibir 2 argumentos, el primero y encerrado entre comillas es la cadena que queremos imprimir en el PDF, el segundo y separado del primero por una coma (,) es el tamaño de la fuente en puntos. Si observamos en la sexta línea  $pdf->ezText(“nnn”); estamos haciendo tres saltos de línea o retornos de carro, para que se separa una cadena de texto de la otra.

Finalmente en la octava línea con el método ezStream(); generamos el archivo PDF con todas las características que definimos en las líneas anteriores.

Ahora veamos el resultado de ver el script en el navegador:

Como podemos apreciar, se genera un pdf, que podemos imprimir o descargar.

Ahora un segundo paso sería ponerle los metadatos al archivo PDF que generemos. Los metadatos son la información que tiene un archivo acerca de su creador, el titulo del archivo, etc. Para esto vamos a hacer un segundo script, el código sería el siguiente:

Ahora expliquemos en script:

En la línea 2, como ya se está haciendo habitual vamos a incluir la clase class.ezpdf.php, en la siguiente línea creamos la variable basada en la clase Cezpdf (que hereda todos los métodos de esta clase), y como parámetro le pasamos el tamaño de la hoja, que en este caso será letter (carta). En la cuarta línea seleccionamos la tipografía.

De la línea 5 a la línea 11. Estamos creando un array unidimensional con índices asociativos, el nombre de dicho array es $arreglodatos,  cada uno de los índices asociativos del array corresponde a los valores de los metadatos, como lo son el titulo del documento, el nombre del autor, el asunto, creador y productor.

Una vez creado el array vamos a usar el método addInfo para agregar los datos contenidos en el array como metadatos del archivo que se va a generar.

De la línea 13 a la 15, estamos usando el método ezText para poner un par de cadenas de texto en el PDF con su respectiva separación (saltos de línea) que están en la línea 15.

En la línea 16 y 17 estamos imprimiendo con la función date de PHP la fecha y hora actual. Si a la hora de ejecutar nuestro script nos aparece la fecha y hora que no corresponden a nuestra zona horaria, debemos de editar el archivo de configuración de PHP, llamado php.ini buscando en él la directiva [date] y para el valor de la variable date.timezone asignar un valor correspondiente a la Zona horaria donde nos encontremos, como se muestra en la siguiente captura:

Guardamos y cerramos el archivo y ahora si podremos ver los resultados en el navegador:

Como tercer ejemplo vamos a hacer un script que maneje un array bidimensional con índices asociativos, llenando los valores para dicho array en el mismo script, y usaremos este array para construir una tabla en un archivo PDF. Las consultas que nos devuelve MySQL a PHP se recogen en arrays de este tipo, por eso es importante conocer su funcionamiento. El código del script es el siguiente:

Vamos a explicar el script:

En las primeras líneas se repite lo que hemos venido haciendo en los dos anteriores scripts, la diferencia empieza en las líneas 6, 7 y 8, que es donde estamos generando el array bidimensional asociativo, el nombre del array es $filas y va a tener tres filas y tres columnas, las filas tienen índices numéricos, mientras que las columnas tienen índices de cadenas de caracteres (por lo que se conocen con el nombre de asociativos).

En la línea 10, mandamos una cadena al PDF. En la línea 12 estamos construyendo una tabla en formato PDF, usando el método estable, que se le pasa como argumento el array. Este método construirá la tabla tomando en cuenta la cantidad de filas y columnas que tenga el array que le estamos dando como argumento.

Finalmente en la línea 14 con el método ezStream generamos el PDF con las características definidas en las líneas anteriores. El resultado en el navegador se vería de la siguiente forma:

Ahora sí, ya que tenemos los conceptos básicos, vamos a hacer un script sencillo, que vuelque una consulta a un PDF. Para esto vamos a utilizar la base de datos “Biblioteca” que hemos utilizado en otros post, y la tabla que consultaremos será la tabla “Autor”.

La tabla Autor, únicamente tiene 3 campos, clave_autor, nombre y nacionalidad. La consulta que vamos a hacer es un “select * from autor” para que nos muestre en PDF todos los registros de la tabla autor, con todos sus campos por registro.

El script es sencillo y lo vamos a mostrar a continuación:

Vamos a explicar el código:

En las líneas 2 y 3, agregamos el archivo de conexión, en donde nos conectamos a la base de datos, y también agregamos la clase “class.ezpdf.php” que importa las funciones para manipulación y creación de archivos PDF.

En la línea 4, creamos la variable objeto $pdf y le decimos que será de tamaño carta.

En la línea 5, seleccionamos la tipografía.

En la línea 6 creamos una variable llamada $cadena, que contiene la instrucción MySQL que vamos a ejecutar.

En la línea 7, ejecutamos la instrucción que está en la variable cadena y el resultado lo almacenamos en la variable $consulta.

En la línea 8 cerramos la conexión.

De la línea 10 a las línea 13, estamos estableciendo un ciclo, dentro de él usamos la función de PHP llamada mysql_fetch_assoc que nos va a ayudar a hacer un recorrido sobre la variable $consulta que contiene  el resultado de la consulta que hicimos a MySQL, cada línea de esa variable consulta la estaremos pasando en cada iteración del ciclo a la variable $temporal y esta a su vez se irá insertando como elemento en un array asociativo llamado $arreglo. La finalidad de este ciclo es convertir a la variable $consulta en un array asociativo llamado $arreglo, para que este último pueda ser usado en la construcción de una tabla dentro del documento PDF.

En la línea 16, usando el método ezText, ponemos una cadena en el PEDF.  En la línea 17 hacemos 3 retornos de carro (saltos de línea).

En la línea 18 con la instrucción $pdf->ezTable($arreglo); generamos la tabla, pasándole como argumento a la función ezTable  el array asociativo “$arreglo”.

Finalmente en la línea 19 con el método ezStream generamos el PDF.

Ahora veamos el resultado en el navegador:

Vemos incrustado un PDF en nuestro navegador, con el resultado de la consulta a la tabla autor.

Con esto concluimos el presente POST, espero que les sea útil y se diviertan programando aplicaciones Web.

SaluLINUX

Powered By DT Author Box

Written by chris

Vaciar consultas MySQL a PDF usando PHP.
Tagged on:                                             

2 thoughts on “Vaciar consultas MySQL a PDF usando PHP.

  • muchas gracias amigo excelente post andaba muriendo por esto y hoy lo entrego en la escuela… andaba quebrandome la cabeza con fpdf…

    gracias muchas gracias……………………..
    🙂
    me alegra que haya gente como tu………..

  • Hay muchas librerias con las cuales exportar archivos pdf
    hay una muy buena que incluye las librerias mas potentes
    en la actualidad se llama tcpdf las cuales incluye fpdf, dompdf , htmlpdf, etc

    tiene la capacidad de convertir ppor decirlo de alguna manera nuesto codigo html
    a pdf sin nececiddad de estar ubicando con numero los laborioso que trabaja fpdf

    tambien admites css y archivos de formularios incrustados en pdf y xml

Leave a Reply

Follow

Get every new post delivered to your Inbox

Join other followers:

%d bloggers like this: