Convertir HTML a PDF con DocRaptor

Fuente: Canal de Telegram @programacion

Generar PDFs es una tarea muy habitual en esto del desarrollo web. Nos sirven para representar facturas, recibos, eBooks, documentos públicos y mucho más. Desafortunadamente, generar PDFs mediante programación puede darte quebraderos de cabeza puesto que no es una tarea sencilla, especialmente si debes generar muchos en muy poco tiempo.

DocRaptor es una API para convertir HTML en PDF que nos simplifica mucho la tarea, y cuenta con una librería PHP para que la integres en tu proyecto. Una vez dicho todo esto, a continuación te cuento cómo convertir HTML en PDF con DocRaptor.

Instalación

Descárgate la última versión y descomprímela en tu proyecto. Si utilizas Composer, ejecuta esta línea en el terminal.

composer require docraptor/docraptor

Si no utilizas Composer, simplemente descarga la última versión y descomprímela en tu proyecto. Crea un nuevo fichero llamado docraptor.php e incluye autoload.php.

// docraptor.php
require_once('/path/to/docraptor-php/autoload.php');

Autenticación

Puedes utilizar la key “YOUR_API_KEY_HERE” sin tener que registrarte para obtener una cuenta, pero solo puede ser utilizada para testing. Para utilizar una KEY de la API, tendrás que pasar por caja.

$configuration = DocRaptorConfiguration::getDefaultConfiguration();
$configuration->setUsername("YOUR_API_KEY_HERE");

Añade HTML o una URL

Puedes utilizar cualquier HTML a la hora de convertirlo en PDF:

$docraptor = new DocRaptorDocApi();
$doc = new DocRaptorDoc();
$doc->setDocumentContent("<html><body>Hello World</body></html>");

O bien la URL de un sitio web:

$docraptor = new DocRaptorDocApi();
$doc = new DocRaptorDoc();
$doc->setDocumentUrl("http://docraptor.com/examples/invoice.html");

Sea lo que sea lo que utilices, todos los recursos externos (imágenes, hojas de estilo) deben estar accesibles vía Internet puesto que DocRaptor debe tener acceso a ellos.

Opciones de la API

Primero, vamos a asegurarnos de crear un PDF (DocRaptor también puede generar archivos Excel):

$doc->setDocumentType("pdf");

Y si vamos a utilizar la key gratuita, debemos definir que la queremos utilizar en entorno test:

$doc->setTest(true);

Javascript está deshabilitado por defecto a la hora de generar los PDFs, pero puedes habilitarlo mediante esta línea:

$doc->setJavascript(true);

Hay un montón de opciones disponibles. Por eso, te aconsejo que eches un vistazo a la documentación de la API de DocRaptor.

Obtener el documento

Una vez has configurado todas las opciones, simplemente ejecuta este código para generar el documento. Incluye un gestor de errores si algo va mal.

try {
   $create_response = $docraptor->createDoc($doc);
} catch (DocRaptorApiException $error) {
   echo $error . "n";
   echo $error->getMessage() . "n";
   echo $error->getCode() . "n";
   echo $error->getResponseBody() . "n";
}

Puedes guardarlo en tu servidor mediante este código:

$file = fopen("/tmp/docraptor-php.pdf", "wb");
fwrite($file, $create_response);
fclose($file);

O hacer que el usuario se lo pueda descargar mediante este otro:

header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename=example.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($create_response));
ob_clean();
flush();
echo($create_response);
exit;

Código completo

<?php
// docraptor.php
require_once('docraptor-php/autoload.php');

$configuration = DocRaptorConfiguration::getDefaultConfiguration();
$configuration->setUsername("YOUR_API_KEY_HERE");

$docraptor = new DocRaptorDocApi();
$doc = new DocRaptorDoc();
$doc->setDocumentContent("<html><body>Hello World</body></html>");
//$doc->setDocumentUrl("http://docraptor.com/examples/invoice.html");

$doc->setDocumentType("pdf"); // DocRaptor also makes Excel files
$doc->setTest(true);
//$doc->setJavascript(true);

try {
  $create_response = $docraptor->createDoc($doc);

  $file = fopen("/tmp/docraptor-php.pdf", "wb");
  fwrite($file, $create_response);
  fclose($file);

  //header('Content-Description: File Transfer');
  //header('Content-Type: application/pdf');
  //header('Content-Disposition: attachment; filename=example.pdf');
  //header('Content-Transfer-Encoding: binary');
  //header('Expires: 0');
  //header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  //header('Pragma: public');
  //header('Content-Length: ' . strlen($create_response));
  //ob_clean();
  //flush();
  //echo($create_response);
  //exit;

} catch (DocRaptorApiException $error) {
   echo $error . "n";
   echo $error->getMessage() . "n";
   echo $error->getCode() . "n";
   echo $error->getResponseBody() . "n";
}

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

quince + 18 =