Tutorial: Convertir HTML a PDF con PHP

El formato PDF es uno de los que menos me gustan, sin embargo los utilizo bastante y no tengo ninguna duda que es uno de los más populares y que muchas personas eligen a la hora de descargar contenidos de internet.

Hace unos días tuve la necesidad de convertir un documento HTML a PDF utilizando para ello PHP. Las opciones muchas, sin embargo las que dieron mejores resultados muy pocas.

libreria PDF para convertir HTML a PDF

De todas las bibliotecas gratuitas que pude probar con la que mejores resultados obtuve fue con Dompdf. Una biblioteca PHP que se puede descargar y utilizar de forma totalmente gratuita y sin ningún tipo de limitaciones.

Los requerimientos:

  • PHP 5, aunque se recomienda utilizar la versión 5.3 o superior.
  • Tener habilitada la extensión MBString. Actualmente prácticamente todos los alojamientos la tienen.
  • La extensión “DOM” (suele estar instalada, se utiliza principalmente para la gestión de documentos XML)
  • Algunas tipografías. Dependiendo de esto vamos a obtener un mejor resultado.

Instalación:

Podemos descargar la extensión directamente desde el apartado de Github del proyecto e incluirla mediante el uso de include(); o bien utilizando composer:

Descarga:

git clone https://github.com/dompdf/dompdf.git
git submodule init
git submodule update

Instalación con Composer.

{
  "require" : {
        "dompdf/dompdf" : "dev-master"
     }
}

Convertir HTML a PDF con dompdf:

<?php
require_once("dompdf_config.inc.php");

$dompdf = new DOMPDF();

$html = '<html><body>'. 
        '<h1>Generar un PDF con PHP</h1>'.
        '<p>Desde un documentoHTML.</p>'.
        '</body></html>'; 

$dompdf->load_html($html);
$dompdf->render();

$dompdf->stream("resultado.pdf");
?>

Con estas pocas lineas de código al ejecutarse el script el navegador va a descargar un archivo en formato PDF con el contenido indicado.

En el archivo dompdf_config.inc.php vamos a encontrar la información y las opciones para personalizar y adecuar según corresponda la forma en que la biblioteca genera el archivo PDF.

Algunas opciones importantes:

  • DOMPDF_TEMP_DIR. Directorio temporal donde se genera el PDF.
  • DOMPDF_FONT_DIR. Directorio donde se almacenan los archivos de las tipografías.
  • DOMPDF_DEFAULT_PAPER_SIZE. Tamaño del papel, por defecto es tipo Letter.
  • DOMPDF_DEFAULT_FONT. Tipografía por defecto.
  • DOMPDF_DPI. Calidad del PDF.

Guardar el archivo PDF en una ubicación

Es muy normal que nuestro desea sea el de guardar el archivo PDF en alguna ubicación dentro de nuestro servidor. Inclusive se podría considerar una buena practica ya que guardando el PDF generado evitamos al servidor el trabajo de generar el archivo por cada solicitud.

Para lograr esto simplemente ejecutamos:

$dompdf->render();

$output = $dompdf->output();
file_put_contents("/pdfs/salida.pdf", $output);

Recuerden que la carpeta pdfs tiene que tener permisos de escritura.

Paginación

Cuando el archivo PDF generado cuenta con más de una pagina es una buena idea paginar los resultados, para ello dompdf tiene la opción de escribir un pie de pagina de forma casi automática.

Para ello simplemente necesitamos:

$font = Font_Metrics::get_font("helvetica", "bold");
$pdf->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}", 
$font, 6, array(0,0,0));

Esas son las principales funciones de DomPDF, sin embargo esta biblioteca es muy rica en cuanto a opciones para personalizar el resultado.

Creo que con este pequeño tutorial no tendrán problemas para generar un PDF utilizando como base un documento HTML, no obstante cualquier inconveniente no duden en dejar un comentario con su consulta.

Categorizado en: