Generating PDFs is a common programming task. PDFs are used to make invoices, receipts, eBooks, publishing documents and more. Unfortunately, programmatic generation of PDF can be difficult, especially if you need to generate many PDFs rapidly.
DocRaptor is an HTML-to-PDF API that greatly simplifies the problem, and they have a PHP library for easy integration. Let’s walk through how to convert HTML into a PDF with DocRaptor:
Download the latest release and unzip into your project. If you use Composer, run this from your command line:
composer require docraptor/docraptor
If you’re not using Composer, just download the latest release and unzip it into your project. Make a new file called “docraptor.php” and include autoload.php:
// docraptor.php
require_once('/path/to/docraptor-php/autoload.php');
You can use the key “YOUR_API_KEY_HERE” without signing up for an account, but it can only be used for test (watermarked) documents. To make non-watermarked documents, you’ll have to signup for a paid account.
$configuration = DocRaptor\Configuration::getDefaultConfiguration();
$configuration->setUsername("YOUR_API_KEY_HERE");
You can use any HTML you want to make the PDF:
$docraptor = new DocRaptor\DocApi();
$doc = new DocRaptor\Doc();
$doc->setDocumentContent("<html><body>Hello World</body></html>");
You can also use a website URL:
$docraptor = new DocRaptor\DocApi();
$doc = new DocRaptor\Doc();
$doc->setDocumentUrl("http://docraptor.com/examples/invoice.html");
Whether you use HTML or a URL, all the external assets referenced (images, stylesheets, etc) must be accessible over the internet because DocRaptor will need to access them.
First, let’s make sure we make a PDF from HTML (DocRaptor also converts HTML into Excel files):
$doc->setDocumentType("pdf");
And we need to make a test document, since we’re using the free API key:
$doc->setTest(true);
JavaScript is off by default to speed up document creation, but you can turn it on with this line:
$doc->setJavascript(true);
There’s bunch of other options available if you read DocRaptor’s API documentation.
Once all your API options are set, just run this code to generate the PDF document. It includes error handling if anything goes wrong.
try {
$create_response = $docraptor->createDoc($doc);
} catch (DocRaptor\ApiException $error) {
echo $error . "\n";
echo $error->getMessage() . "\n";
echo $error->getCode() . "\n";
echo $error->getResponseBody() . "\n";
}
You can save it to your server with this code:
$file = fopen("/tmp/docraptor-php.pdf", "wb");
fwrite($file, $create_response);
fclose($file);
Or let the user download it with this code:
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;
That’s it.
<?php
// docraptor.php
require_once('docraptor-php/autoload.php');
$configuration = DocRaptor\Configuration::getDefaultConfiguration();
$configuration->setUsername("YOUR_API_KEY_HERE");
$docraptor = new DocRaptor\DocApi();
$doc = new DocRaptor\Doc();
$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 (DocRaptor\ApiException $error) {
echo $error . "\n";
echo $error->getMessage() . "\n";
echo $error->getCode() . "\n";
echo $error->getResponseBody() . "\n";
}
Nice done! Brazo
Thank you Muhammad.