23 abr. 2012

Generando PDF en lugar de HTML con PHP

A mi el PDF siempre me ha parecido un formato bastante coñazo ¿quien no no ha hecho click en un resultado de búsqueda de Google y ha gritado "NOOooooo" cuando se ha dado cuenta que estaba descargando un PDF de 25 Mb?

Este post es para desarrolladores PHP, no para que pases de página web a pdf, para eso ya tienes en chrome la opción de "guardar como pdf" al darle a "imprimir".

Logo

En fin, pero al igual que en la guerra, la informática hace extraños amigos de cama y hace poco he tenido que generar PDFs para imprimir y he tenido que investigar un poco.
¿Por qué pdf y no html?
descargar_mi_pdf
  1. Se ve igual en todos los visores/naegadores e impresiones
  2. Incluye dentro las imágenes y soporta enlaces y otras cosas
No, no es porque no se pueda copiar y pegar o editar, todo es susceptible de esto.

A lo que voy, resulta que puedes convertir un html a PDF con PHP fácilmente (siempre que tengas unas nociones básicas de PHP) con DOMpdf.
Lo descargáis, y lo incluís en vuestro script php y hacéis algo parecido a esto:

require_once("includes/dompdf/dompdf_config.inc.php");
$html = file_get_contents("archivo_pdf.html");
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper('a4', 'portrait');
$dompdf->render();
$dompdf->stream("descargar_mi_pdf.pdf", array("Attachment" => false));

Lo que hacemos es, importamos la librería pdf, luego cargamos el contenido del html (que puede y debe incluir el css), luego creamos un nuevo objeto dompdf, le decimos al objeto que cargue el html, ponemos el tamaño del papel y la orientación, luego que lo dibuje y finalmente que lo mande a pantlla con el nomre de archivo  "descargar_mi_pdf.pdf".

Yo uso smarty (del que ya hablaré en un futuro) para separar la lógica del aspecto. Pero me ha sorprendido lo fácil que es DOMpdf. Espero que os sirva.