Generar un PDF “al vuelo” con PHP con Html2fPdf

En este tutorial vamos a tratar de explicar como generar PDF´s “on line” o “al vuelo” desde nuestras páginas escritas con PHP.

Para ello vamos a utilizar el proyecto html2fpdf. Este proyecto se basa fundamentalmente en la utilización de 3 clases escritas en PHP: FPDF, HTML2FPDF (extensión de la clase FPDF) y PDF (site Version). Se incluye otro script complementario contenido en el archivo htmltoolkit.php.

Para descargar los archivos necesarios id a esta dirección sourceforge.net/projects/html2fpdf.

Una vez descomprimido el archivo zip descargado nos encontraremos con una lista de archivos, de los cuales, algunos de ellos no nos serán necesarios. Por ejemplo, source2doc.php, es una clase que podemos utilizar para volcar en pantalla toda la información relativa a las variables, constantes o métodos que componen una determinada clase que le sería indicada. Pero este archivo no nos resultará necesario para generar PDF´s.

Los archivos y directorio necesarios de todos los descargados para la generación de PDF´s son:
- fpdf.php
- html2fpdf.php
- gif.php
- htmltoolkit.php
- incluir también el directorio o carpeta font

Una vez que tenemos claro que archivos será necesarios utilizar, vamos a subirlos al directorio de nuestro servidor que deseemos.

Vamos a mostrar un ejemplo sencillo de utilización de la clase html2fpdf.

<?php

//incluimos la clase html2fpdf indicando la ruta del archivo donde está contenida
include_once (’html2fpdf.php’);

// ———– Texto Html almacenado en la variable $html —————–
$html = ‘
<html>
<head>
<title>Generando un PDF</title>
</head>
<body>
<p><img src=”http://peachep.files.wordpress.com/2007/10/cabecerablog2.jpg” alt=”Cabecera Blog” width=”95%” /></p>
<h2>Html2Fpdf, Creando PDF “al vuelo” con PHP</h2>
<p>En este tutorial vamos a tratar de explicar como generar PDFs on line o al vuelo desde nuestras páginas escritas con PHP.</p>
<p>Para ello vamos a utilizar el proyecto html2fpdf. Este proyecto se basa fundamentalmente en la utilización de 3 clases escritas en PHP: <b>FPDF, HTML2FPDF (extensión de la clase FPDF) y PDF (site Version)</b>. Se incluye otro script complementario contenido en el archivo htmltoolkit.php.</p>
<p>Para descargar los archivos necesarios id a esta dirección sourceforge.net/projects/html2fpdf.</p>
<p>Una vez descomprimido el archivo zip descargado nos encontraremos con una lista de archivos, de los cuales, algunos de ellos no nos serán necesarios. Por ejemplo, source2doc.php, es una clase que podemos utilizar para volcar en pantalla toda la información relativa a las variables, constantes o métodos que componen una determinada clase que le sería indicada. Pero este archivo no nos resultará necesario para generar PDFs.</p>
<p>Los archivos y directorio necesarios de todos los descargados para la generación de PDFs son:
<ul>
<li>fpdf.php</li>
<li>html2fpdf.php</li>
<li>gif.php</li>
<li>htmltoolkit.php</li>
<li>incluir también el directorio o carpeta font</li>
</ul>
</p>
<p><a href=”http://peachep.wordpress.com”>peachep.wordpres.com</a></p>
</body>
</html>
‘;
// ———– Texto Html —————–

$pdf = new HTML2FPDF(); // Creamos una instancia de la clase HTML2FPDF

$pdf -> AddPage(); // Creamos una página

$pdf -> WriteHTML($html);//Volcamos el HTML contenido en la variable $html para crear el contenido del PDF

$pdf -> Output(’doc.pdf’, ‘D’);//Volcamos el pdf generado con nombre ‘doc.pdf’. En este caso con el parametro ‘D’ forzamos la descarga del mismo.

?>

Para mas información:
html2fpdf.sourceforge.net

19 comentarios para “Generar un PDF “al vuelo” con PHP con Html2fPdf”

  1. sysmaya Dice:

    Este es el mejor Metodo para crear PDF
    En los otros metodos toca “Dibujar el texto”
    usar coordenadas cartesianas, ya suficiente
    trabajo con crearlo en Html…

  2. Aldo Dice:

    Buenas tardes. Disculpa intete utilizar el metodo, y no pude,
    despues solamente copie el ejemplo y lo intente utilizar.
    De nuevo no se pudo…

    No se porque me da este error.
    Parse error: syntax error, unexpected ‘>’

  3. Ruben Dice:

    Hola Aldo;

    no hagas un copia-pega directo del texto que se presenta en el Post. Lo mejor es que lo insertes tu “a manita”.

    Ya me contarás.

  4. David Dice:

    Lo he estado probando y no hay manera: me dices un error en el fichero de la libreria en la linia 155 (si la comento me deja continuar: //$this->DisplayPreferences(”);), pero me falla por otro lado:

    Warning: FPDF::include(font/helvetica.php) [function.FPDF-include]: failed to open stream: No such file or directory in C:\xampp\php\PEAR\fpdf.php on line 550

    Warning: FPDF::include() [function.include]: Failed opening ‘font/helvetica.php’ for inclusion (include_path=’.;C:\xampp\php\pear\’ ;) in C:\xampp\php\PEAR\fpdf.php on line 550
    FPDF error: Could not include font metric file

    me podrias ayudar?

    Gracias!

    David

  5. Ruben Dice:

    Hola David;

    La línea que tienes cometanda: $this-&gt ;DisplayPreferences (” ;)

    Descomentala y cambia el “&gt ;” (incluida el punto y coma) por un simbolo de mayor que “>”.

    Con respecto al otro error. Prueba a comentar la línea 550 del archivo fpdf.php.

    Puede, que aún comentando esta línea te de error con otras fuentas, coméntalas hasta que deje de darte error.

  6. Rodrigo Aguilera Dice:

    Muy buenos dias, como puedo hacerle para que interprete correctamente los acentos y la letra ñ?

    Por ejemplo la palabra páginas la muestra: páginas
    Muchas gracias.

  7. Ruben Dice:

    Rodrigo;

    Una de las opciones mas rápidas y fiables es la de utilizar entidades de caracteres. Es decir para representar la ñ, utilizar &ntilde ;, para los acentos:

    á -> &aacute ;
    é -> &eacute ;
    Ó -> &Oacute ;
    ….

    Otra solución puede ser la de definir el charset o juego de caracteres en el documento a UTF-8. Esta opción no la he probado. Ya me contaréis.

  8. Antonio Dice:

    Hola Ruben,

    De todos los metodos que he usado este es el mejor sin duda, pero tengo un problema, no me reconoce los .gif, los jpg y png se ve que el parse si que va bien, pero en los gif no me deja, meto en mi html una imagen con una url y me da este error:

    FPDF error: GIF parser: unable to open file http://www.interplanet.com.mx/imagenes/dw_f0-72-rgb_gif.gif

    Esto supongo que es poruqe el parse del gif da algun tipo de problema, ¿Podrías ayudarme por favor?

  9. Ruben Dice:

    Parece ser que existe un bug en el antiguo gif.php para PHP5.

    Prueba a descargarte el nuevo desde: http://sourceforge.net/tracker/download.php?group_id=114602&atid=668888&file_id=188383&aid=1537502

    Un saludo.

  10. Antonio Dice:

    Muchas gracias Ruben, me ha funcionado, ahora si pongo cualquier imagen de internet, la url la pilla, pero me sigo encontrando con un problema, y es que estoy exportando en contenido de una wiki a pdf, pero cuando cuelgo un fichero en mi wiki (tiene una url asociada) entonces no me funciona, pero ni con png, jpg ni .gif. me da el mismo error de que no puede

    FPDF error: Missing or incorrect image file: RUTA DE LA IMAGEN

    Sabes por que puede ser? porque imagenes de internet si, pero de mi wiki no lo pilla?

    GRacias.

  11. Ruben Dice:

    El error puede estar en que la función no encuentra ningúna imagen en la url que le indicas.

  12. Antonio Dice:

    Pero es que el caso que el error me muestra la url que intenta abrir, la copio y la pego en un navegador y si que puedo acceder, es muy raro.

    Gracias.

  13. Ruben Dice:

    Bueno; Antonio me ha enviado la solución en un correo. Aquí os la dejo:

    Las imagenes, moodle las guarda en carpetas y se ve que mediante el path que ponia no podia acceder. Pues bien, he hecho un replace cuando recupero mi HTML del path que el interpreta por el directorio donde realmente se guarda.

    $pdf -> WriteHTML(str_replace(”path_pagina_moodle/moodle/file.php”, “/opt/lampp/moodledata”, $html));

  14. Betsy Dice:

    Hola cuando pruebo la clase con el sitio en el q estoy trabajando me da el siguiente error Fatal error: Call to undefined method: html2fpdf->wordwrap() in C:\AppServ\www\Copia de calculo_hrs\html2fpdf.php on line 2538, pordrias ayudarme por favor, gracias.

  15. Ruben Dice:

    la funcion WordWrap() se encuentra en el archivo fpdf.php, primero de todo comprueba que has hecho un include de este archivo y de que esta función existe en el fpdf.php que te has descargado.

    El nombre de esta función se escribe con las dos W en mayúscula, no en minúscula. Comprueba la línea 2538 en el archivo html2fpdf.php y comprueba que la función esta llamada con su nombre correctamente escrito (con las dos W en mayúscula).

  16. Juan Dice:

    Sinceramente podrian poner un ejemplo mas claro no se pero estoy es en cero. es porq lo necesito urgente yo uso fpdf pero estre me parece super mejor muchas gracias y disculpen las molestias

  17. Ruben Dice:

    y digo yo Juan …. ¿Que ejemplo podría poner mas claro que éste?. Lo único que tienes que ver claro es que el HTML que vamos a “transformar” a PDF lo almacenamos, en este caso, en la variable $html; para luego pasárlela como parámetro a la función WriteHTML de este modo:
    $pdf -> WriteHTML($html);

  18. felipe fernandez Dice:

    Genial.
    Pero no veo ninguna imagen.
    Tampoco le hace caso a los style (fuentes, tamaños de letra,etc )
    ¿mas documentacion?

  19. Ruben Dice:

    Los estilos CSS no los “entiende”. Se limita a traducir el código las etiquetas del “viejo” html con algunos de sus atributos; como el bgcolor para el color de fondo de algunos elementos (por ejemplo los TD de una tabla), las etiquetas … saltos de línea.

    También está soportada la etiqueta de imagen <img src=”… de modo que el problema debe de ser otro. Inténtalo con alguna imagen que tengas en tu servidor local o contratado.

    Tenéis toda la documentación en http://html2fpdf.sourceforge.net/

Escribe un comentario