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";
}