Tech talk given by Jelle Henkens at CakeFest 2012 in Manchester, UK.
Integrating the CakePdf plugin to generate PDF documents in your CakePHP applications using WkHtmlToPdf.
2. ABOUT ME
• Jelle Henkens
• LemonBE on IRC, @lemonit on Twitter
• Belgian in the UK
• Lead Developer at Geneo Software
• CakePHP Core Team Developer
• Founder of followmy.tv
3. WHAT IS CAKEPDF
• Generate PDF documents from HTML
• Easily pick which library to render the PDF
• PDF Encryption
• Layouts, views, helpers and more
• Use your own encryption / render engine
4. WHY IT WAS BUILT
• Massive differences in API between pdf libraries
// Using DomPdf // Tcpdf example
require_once("dompdf_config.inc.php"); require_once('config/lang/eng.php');
require_once('tcpdf.php');
$html =
'<html><body>'. $html =
'<p>Put your html here.</p>'. '<html><body>'.
'</body></html>'; '<p>Put your html here.</p>'.
'</body></html>';
$dompdf = new DOMPDF();
$dompdf->set_paper('A4', 'landscape'); $tcpdf = new TCPDF('portrait', 'mm',
$dompdf-> 'A4');
$dompdf->load_html($html); $tcpdf->AddPage();
$dompdf->render(); $tcpdf->writeHTML($html);
$pdfData = $dompdf->output(); $pdfData = $tcpdf->Output('', 'S');
5. WHY IT WAS BUILT
• And now with CakePdf
// Using DomPdf // Tcpdf example
App::uses('CakePdf', 'CakePdf.Pdf'); App::uses('CakePdf', 'CakePdf.Pdf');
$html = $html =
'<html><body>'. '<html><body>'.
'<p>Put your html here.</p>'. '<p>Put your html here.</p>'.
'</body></html>'; '</body></html>';
$cakePdf = new CakePdf(array( $cakePdf = new CakePdf(array(
'engine' => 'CakePdf.DomPdf', 'engine' => 'CakePdf.Tcpdf',
'orientation' => 'portrait', 'orientation' => 'portrait',
'pageSize' => 'A4' 'pageSize' => 'A4'
)); ));
$pdfData = $cakePdf->output($html); $pdfData = $cakePdf->output($html);
6. WHY IT WAS BUILT
• And now with CakePdf
// Using DomPdf // Tcpdf example
App::uses('CakePdf', 'CakePdf.Pdf'); App::uses('CakePdf', 'CakePdf.Pdf');
$html = $html =
'<html><body>'. '<html><body>'.
'<p>Put your html here.</p>'. '<p>Put your html here.</p>'.
'</body></html>'; '</body></html>';
$cakePdf = new CakePdf(array( $cakePdf = new CakePdf(array(
'engine' => 'CakePdf.DomPdf', 'engine' => 'CakePdf.Tcpdf',
'orientation' => 'portrait', 'orientation' => 'portrait',
'pageSize' => 'A4' 'pageSize' => 'A4'
)); ));
$pdfData = $cakePdf->output($html); $pdfData = $cakePdf->output($html);
7. BUILT IN RENDER ENGINES
External Binary
WkHtmlToPdf stable
Uses WebKit
DomPdf alpha PHP Based
Mpdf alpha PHP Based
Tcpdf alpha PHP Based
8. BUILT IN RENDER ENGINES
External Binary
WkHtmlToPdf stable
Uses WebKit
DomPdf alpha PHP Based
Mpdf alpha Very Nice!
PHP Based
Tcpdf alpha PHP Based
9. CONFIGURATION
Setup
Add in Config/bootstrap.php
CakePlugin::load('CakePdf', array(
'bootstrap' => true,
'routes' => true
));
Needs RequestHandlerComponent
class AppController extends Controller {
public $components = array('RequestHandler');
}
10. CONFIGURATION
Special case for CakePHP 2.1.x
Config/bootstrap.php
CakePlugin::load('CakePdf', array(
'bootstrap' => true
));
Config/routes.php
Router::parseExtensions('pdf');
11. CONFIGURATION
Settings
Global settings
// Config/bootstrap.php
Configure::write('CakePdf', array(
'engine' => 'CakePdf.WkHtmlToPdf',
'pageSize' => 'A4',
'orientation' => 'portrait'
));
Inside the controller
public function view($id) {
$this->pdfConfig = array(
'orientation' => 'landscape',
'download' => true,
'filename' => 'invoice-2005.pdf'
);
.. Rest of action logic ..
}
12. TO VIEW OR NOT TO VIEW
• Generating PDF files with the .pdf extension in the URL
• Viewing PDF documents in the browser
• Download to disk
• Smaller files
• Stand-alone to generate raw PDF data
• Email attachments
• Offline processing
• Larger files
13. REQUESTHANDLER FLOW
View in browser or download to disk
• Layout file App/View/Layout/pdf/default.ctp
• View file App/View/Orders/pdf/invoice.ctp
• All the CakePHP goodies to your disposal
• Helpers
• Blocks
• Elements
15. ENCRYPTING PDF FILES
• Protect against viewing, printing, editing and more
• pdftk binary from PDFLabs
• 128 bit encryption
• Second pass encryption
• Encrypt existing PDF documents
16. PASSWORD TYPES
• Owner password
• Unlock protected permissions
• Cannot be the same as the user password
• User password
• Will prompt before opening the PDF Document
• Cannot exist without an owner password