Crear PDF con marca de agua en PHP mediante Dompdf

El hecho de generar PDFs de forma dinámica puede ser muy útil si queremos que nuestros usuarios se descarguen el contenido de nuestra página web, ya sea en formato texto o en HTML. En este caso, debemos convertir el contenido a un fichero PDF antes de que el usuario se lo descargue. Puedes convertir HTML a PDF en PHP de forma sencilla mediante Dompdf. Esta librería es la manera más sencilla de crear documentos PDF con información dinámica utilizando PHP. Dompdf te ayudará a crear un fichero PDF y a añadirle contenido HTML mediante PHP.

Dompdf te proporciona varias opciones de configuración para así mejorar lo que viene siendo la creación del PDF. Una de estas mejoras es la posibilidad de agregar una marca de agua. Sin duda alguna, una de las mejoras que más se suele utilizar cuando se crea un PDF. En este tutorial te mostraremos a convertir HTML a PDF y a añadir una marca de agua al fichero con Dompdf.

Por si no lo sabes, una marca de agua es una imagen o un texto que puede aparecer delante o detras del contenido del documento PDF. En este ejemplo te mostraremos cómo implementar ambos métodos. ¿Preparado? ¡Vamos allá!

Descarga e instala Dompdf

Lo primero que tienes que hacer es descargar la última versión estable de Dompdf desde su GitHub. Extrae el paquee y colócalo en el directorio de tu aplicación. A continuación, incluye el autoloader para cargar la librería y las funciones helper en tu script PHP.

require_once 'dompdf/autoload.inc.php';

Añade una marca de agua al PDF (texto)

En el siguiente código se genera un PDF y agrega una marca de agua en formato texto al fichero mediante la librería Dompdf utilizando PHP.

  • Utiliza la referencia de los namespaces de Dompdf, Options y FontMetrics.
  • Define la opción isPhpEnabled a true para embeber el PHP Instancia la clase dompdf
  • Añade el contenido HTML Convierte el HTML a PDF
  • Crea la instancia canvas utilizando el método getCanvas() de la clase Dompdf
  • Crea la instancia a Font Metrics
  • Obtén la altura y ancho de la página utilizando get_width() y get_height() de la clase Canvas
  • Obtén la fuente utilizando el método getFont() de la clase FontMetrics
  • Define el texto que quieres añadir como marca de agua
  • Obtén la altura y ancho del texto utilizando getFontHeight() y getTextWidth() de la clase FontMetrics
  • Define la posición horizontal y vertical del texto
  • Imprime la marca de agua dentro del PDF utilizando el método text() de la clase Canvas
  • Genera el PDF utilizando la función stream() de la clase Dompdf
use DompdfDompdf; 

use DompdfOptions; 

use DompdfFontMetrics; 

$options = new Options(); 
$options->set('isPhpEnabled', 'true'); 

$dompdf = new Dompdf($options); 
 
$dompdf->loadHtml('<h1>Bienvenido a programacion.net</h1>'); 
 
$dompdf->setPaper('A4', 'landscape'); 
 
$dompdf->render(); 
 
$canvas = $dompdf->getCanvas(); 
 
$fontMetrics = new FontMetrics($canvas, $options); 
 
$w = $canvas->get_width(); 
$h = $canvas->get_height(); 
 
$font = $fontMetrics->getFont('times'); 
 
$text = "CONFIDENTIAL"; 
 
$txtHeight = $fontMetrics->getFontHeight($font, 75); 
$textWidth = $fontMetrics->getTextWidth($text, $font, 75); 
 
$canvas->set_opacity(.2); 
 
$x = (($w-$textWidth)/2); 
$y = (($h-$txtHeight)/2); 
 
$canvas->text($x, $y, $text, $font, 75); 

$dompdf->stream('document.pdf', array("Attachment" => 0));

Añade una marca de agua al PDF (imagen)

En el siguiente código se genera un PDF y agrega una marca de agua en formato imagen al fichero mediante la librería Dompdf utilizando PHP.

  • Define la ruta de la imagen que quieres añadir como marca de agua
  • Agrega la marca de agua al documento PDF utilizando el método image() de la clase Canvas
use DompdfDompdf; 

use DompdfOptions; 
 
$options = new Options(); 
$options->set('isPhpEnabled', 'true'); 
 
$dompdf = new Dompdf($options); 
 
$dompdf->loadHtml('<h1>Bienvenido a programacion.net</h1>'); 
 
$dompdf->setPaper('A4', 'landscape'); 
 
$dompdf->render(); 
 
$canvas = $dompdf->getCanvas(); 
 
$w = $canvas->get_width(); 
$h = $canvas->get_height(); 
 
$imageURL = 'images/codexworld-logo.png'; 
$imgWidth = 200; 
$imgHeight = 20; 
 
$canvas->set_opacity(.5); 
 
$x = (($w-$imgWidth)/2); 
$y = (($h-$imgHeight)/2); 
 
$canvas->image($imageURL, $x, $y, $imgWidth, $imgHeight); 
 
$dompdf->stream('document.pdf', array("Attachment" => 0));

Configuración de la marca de agua en texto

Puedes cambiar la posición, el tamaño de la fuente, el espacio entre caracteres y la rotación (ángulo) de la marca de agua en formato texto en el PDF.

/** 
 * Writes text at the specified x and y coordinates. 
 * 
 * @param float $x 
 * @param float $y 
 * @param string $text the text to write 
 * @param string $font the font file to use 
 * @param float $size the font size, in points 
 * @param array $color 
 * @param float $word_space word spacing adjustment 
 * @param float $char_space char spacing adjustment 
 * @param float $angle angle 
 */ 
text($x, $y, $text, $font, $size, $color = array(0, 0, 0), $word_space = 0.0, $char_space = 0.0, $angle = 0.0);

Configuración de la marca de agua en imagen

Puedes cambiar la posición, el ancho, el alto y la resolución de la marca de agua en imagen dentro del PDF.

/** 
 * Add an image to the pdf. 
 * 
 * The image is placed at the specified x and y coordinates with the 
 * given width and height. 
 * 
 * @param string $img_url the path to the image 
 * @param float $x x position 
 * @param float $y y position 
 * @param int $w width (in pixels) 
 * @param int $h height (in pixels) 
 * @param string $resolution The resolution of the image 
 */ 
image($img_url, $x, $y, $w, $h, $resolution = "normal");

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP