Guía DOMPDF Completa

Todas las posibilidades de DOMPDF para su uso en proyectos web de PHP

Generar PDF librerias php

Con este artículo pretendo dejarte una guía completa de DOMPDF para todos sus usos y configuraciones (al menos las más importantes).

Todos los casos de uso de Dompdf los encontrarás con ejemplos de código fáciles de entender y de utilizar.

Bases para crear tus PDFs con Dompdf

Como probablemente sabrás, DOMPDF te permite crear PDFs en PHP haciendo uso de los lenguajes de marcas HTML y CSS.

Debes tener en cuenta a la hora de crear la estructura de tus PDFS que la librería Dompdf tiene sus limitaciones, y no todas las etiquetas y reglas CSS serán reconocidas.

Las características de la librería son:

  • Soporta CSS 2.1 y algunas propiedades de CSS3 incluyendo @import, @media & @page
  • Soporte la mayoría de los atributos presenciales de HTML 4.0 como pueden ser width o colspan. 
  • Soporta hojas de estilo externas o locales.
  • Permite hacer uso de tablas complejas (su mayor virtud) incluyendo colspan, rowspan, estilos para celdas individuales, etc.
  • También te deja incluir imagenes de los formatos gif, png (8, 24 y 32 bits con canal alpha), bmp & jpeg.
  • Permite hacer uso de PHP en línea.
  • Tiene soporte básico para SVG.

Conociendo sus capacidades podrás crear tu primer PDF realizando el siguiente orden de comandos:

<?php
use Dompdf\Dompdf; //para incluir el namespace de la librería

$dompdf = new Dompdf(); //crear el objeto de la clase Dompdf
       
// Componer el HTML
$html = '<h1>Hola</h1>'; //el html que necesites en formato texto, puedes incluirlo desde una vista de tu MVC
        
// Añadir el HTML a dompdf
$dompdf->loadHtml($html);
        
//Establecer el tamaño de hoja en DOMPDF
$dompdf->setPaper('A4', 'portrait');

// Renderizar el PDF
$dompdf->render();

// Forzar descarga del PDF
$dompdf->stream("mypdf.pdf", [ "Attachment" => true]);
?>

Generar un PDF de UTF-8

Para generar un PDF en UTF-8 cpn Dompdf tan solo necesitarás incluir la etiqueta meta de charset UTF-8 en el HTML que vayas a precargat tal cual lo harías en una web normal.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Definir tamaño de página en DOMPDF

DOMPDF permite configurar el tamaño de la hoja de distintas formas. Puedes hacerlo haciendo uso de los tamaños predefinidos o mediante un tamaño custom.

El tamaño por defecto de la página de DOMPDF es US letter. Si quieres otro tamaño tendrás que utilizar el comando setPaper() con las opciones que necesites. Ejemplo:

//tamaño A4 en vertical
$dompdf->setPaper('A4', 'portrait');

Los tamaños predefinidos de DOMPDF son los siguientes, siendo el primer valor entre comillas el valor de configuración y el array de la derecha el tamaño en puntos:

    "4a0" => array(0,0,4767.87,6740.79),
    "2a0" => array(0,0,3370.39,4767.87),
    "a0" => array(0,0,2383.94,3370.39),
    "a1" => array(0,0,1683.78,2383.94),
    "a2" => array(0,0,1190.55,1683.78),
    "a3" => array(0,0,841.89,1190.55),
    "a4" => array(0,0,595.28,841.89),
    "a5" => array(0,0,419.53,595.28),
    "a6" => array(0,0,297.64,419.53),
    "a7" => array(0,0,209.76,297.64),
    "a8" => array(0,0,147.40,209.76),
    "a9" => array(0,0,104.88,147.40),
    "a10" => array(0,0,73.70,104.88),
    "b0" => array(0,0,2834.65,4008.19),
    "b1" => array(0,0,2004.09,2834.65),
    "b2" => array(0,0,1417.32,2004.09),
    "b3" => array(0,0,1000.63,1417.32),
    "b4" => array(0,0,708.66,1000.63),
    "b5" => array(0,0,498.90,708.66),
    "b6" => array(0,0,354.33,498.90),
    "b7" => array(0,0,249.45,354.33),
    "b8" => array(0,0,175.75,249.45),
    "b9" => array(0,0,124.72,175.75),
    "b10" => array(0,0,87.87,124.72),
    "c0" => array(0,0,2599.37,3676.54),
    "c1" => array(0,0,1836.85,2599.37),
    "c2" => array(0,0,1298.27,1836.85),
    "c3" => array(0,0,918.43,1298.27),
    "c4" => array(0,0,649.13,918.43),
    "c5" => array(0,0,459.21,649.13),
    "c6" => array(0,0,323.15,459.21),
    "c7" => array(0,0,229.61,323.15),
    "c8" => array(0,0,161.57,229.61),
    "c9" => array(0,0,113.39,161.57),
    "c10" => array(0,0,79.37,113.39),
    "ra0" => array(0,0,2437.80,3458.27),
    "ra1" => array(0,0,1729.13,2437.80),
    "ra2" => array(0,0,1218.90,1729.13),
    "ra3" => array(0,0,864.57,1218.90),
    "ra4" => array(0,0,609.45,864.57),
    "sra0" => array(0,0,2551.18,3628.35),
    "sra1" => array(0,0,1814.17,2551.18),
    "sra2" => array(0,0,1275.59,1814.17),
    "sra3" => array(0,0,907.09,1275.59),
    "sra4" => array(0,0,637.80,907.09),
    "letter" => array(0,0,612.00,792.00),
    "legal" => array(0,0,612.00,1008.00),
    "ledger" => array(0,0,1224.00, 792.00),
    "tabloid" => array(0,0,792.00, 1224.00),
    "executive" => array(0,0,521.86,756.00),
    "folio" => array(0,0,612.00,936.00),
    "commercial #10 envelope" => array(0,0,684,297),
    "catalog #10 1/2 envelope" => array(0,0,648,864),
    "8.5x11" => array(0,0,612.00,792.00),
    "8.5x14" => array(0,0,612.00,1008.0),
    "11x17"  => array(0,0,792.00, 1224.00)

Con estos datos podrías configurar el tamaño de página como a continuación:

<?php
//panorámico en A4
$dompdf->setPaper('A4', 'landscape');

//en A5 y en vertical
$dompdf->setPaper('A5', 'portrait');

//tamaño custom, se especifica en puntos, lo que en CSS se escribe como pt
$dompdf->set_paper(array(0, 0, 595, 841), 'portrait');
?>

Tamaño de página en centímetros

Para configurar la página en centímetros deberás hacer la conversión de tamaños: centimetros a puntos.

Utilizando Google es realmente fácil. También puedes utilizar herramientas online de conversión.

Por ejemplo, si busco en Google 5 centimetros a puntos tipográficos obtengo: 141,732pt.

Ahora imaginate que quiero configurar la página en 5cm x 10cm, hago la conversión y configuro la página como a continuación:

<?php
$dompdf = new Dompdf();
       
// Componer el HTML
$html = '<h1>Prueba SRCodigoFuente</h1>';
        
// Añadir el HTML a dompdf
$dompdf->loadHtml($html);
        
//Establecer el tamaño de hoja en DOMPDF
$dompdf->setPaper( [0, 0, 141.732,  283,465); //x inicio, y inicio, ancho final, alto final

// Renderizar el PDF
$dompdf->render();

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

Cambiar margenes página DOMPDF

Para modificar los margenes interiores de la página del PDF deberemos hacerlo directamente con CSS. De esta forma, si queremos que un PDF normal tenga unos margenes concretos, haremos lo siguiente en nuestro CSS:

html {
	margin: 50pt 15pt;
}

Cambiar fuente en DOMPDF

Dompdf también te permite personalizar la fuente del PDF resultado. De esta forma podrás utilizar cualquier fuente por defecto de los navegadores como Arial, Courier o Verdana entre otras.

Para cambiar la fuente de la página del PDF debes te servirá el siguiente ejemplo:

<?php
use Dompdf\Dompdf;

$dompdf = new Dompdf();
$dompdf->set_option('defaultFont', 'Courier');

?>

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.