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
composer require docraptor/docraptorSi 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();O bien la URL de un sitio web:
$doc = new DocRaptorDoc();
$doc->setDocumentContent("<html><body>Hello World</body></html>");
$docraptor = new DocRaptorDocApi();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.
$doc = new DocRaptorDoc();
$doc->setDocumentUrl("http://docraptor.com/examples/invoice.html");
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 {Puedes guardarlo en tu servidor mediante este código:
$create_response = $docraptor->createDoc($doc);
} catch (DocRaptorApiException $error) {
echo $error . "n";
echo $error->getMessage() . "n";
echo $error->getCode() . "n";
echo $error->getResponseBody() . "n";
}
$file = fopen("/tmp/docraptor-php.pdf", "wb");O hacer que el usuario se lo pueda descargar mediante este otro:
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;
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";
}
0 Comentarios