Complete DOMPDF Guide

With this article I intend to leave you a Complete guide to DOMPDF for all its uses and configurations (at least the most important ones).

All the Dompdf use cases you will find them with code examples that are easy to understand and use.

Content

  • Bases to create your PDFs with Dompdf
  • Generate a UTF-8 PDF
  • Define page size in DOMPDF
  • Change Page Margins DOMPDF
  • Change font in DOMPDF

Bases to create your PDFs with Dompdf

As you probably know, DOMPDF allows you to create PDFs in PHP making use of HTML and CSS markup languages.

You must take into account when creating the structure of your PDFS that the Dompdf library has its limitations, and not all CSS tags and rules will be recognized.

The features of the library are:

  • Supports CSS 2.1 and some CSS3 properties including @import, @media & @page
  • Support most of the HTML 4.0 presence attributes such as width or colspan.
  • Supports external or local style sheets.
  • It allows you to use complex tables (its greatest virtue) including colspan, rowspan, styles for individual cells, etc.
  • It also lets you include images of gif, png (8, 24 and 32 bit with alpha channel), bmp & jpeg formats.
  • Allows you to use PHP online.
  • It has basic support for SVG.

Knowing your capabilities you can create your first PDF performing the following command order:

<?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]);
?>

Generate a UTF-8 PDF

For generate a PDF in UTF-8 cpn Dompdf You will only need to include the UTF-8 charset meta tag in the HTML that you are going to preload as you would on a normal website.

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

Define page size in DOMPDF

DOMPDF allows you to configure the sheet size in different ways. You can do it using the predefined sizes or through a size custom.

He DOMPDF’s default page size is US letter. If you want another size you will have to use the command setPaper() with the options you need. Example:

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

The DOMPDF predefined sizes They are as follows, with the first value in quotes being the configuration value and the array on the right being the size in points:

    "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)

With this data you could configure the page size as below:

<?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');
?>

Page size in centimeters

To configure the page in centimeters you must convert sizes: centimeters to points.

Using Google is really easy. You can also use online conversion tools.

For example, if I Google 5 centimeters to typographical points I get: 141,732pt.

Now imagine that I want to set the page to 5cm x 10cm, I do the conversion and set the page as below:

<?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");
?>

Change Page Margins DOMPDF

To modify the inner margins of the PDF page we must do it directly with CSS. In this way, if we want a normal PDF to have specific margins, we will do the following in our CSS:

html {
	margin: 50pt 15pt;
}

Change font in DOMPDF

Dompdf also allows you to customize the font of the resulting PDF. In this way you can use any default font of browsers such as Arial, Courier or Verdana among others.

To change the source of the PDF page you must use the following example:

<?php
use Dompdf\Dompdf;

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

?>

Leave a Reply