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.
PDF Version of http://www.slideshare.net/jellehenkens/building-php-documents-with-cakepdf-cakefest-2012
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. BUILT IN RENDER ENGINES
External Binary
WkHtmlToPdf stable
Uses WebKit
DomPdf alpha PHP Based
Mpdf alpha Very Nice!
PHP Based
Tcpdf alpha PHP Based
7. 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');
}
8. CONFIGURATION
Special case for CakePHP 2.1.x
Config/bootstrap.php
CakePlugin::load('CakePdf', array(
'bootstrap' => true
));
Config/routes.php
Router::parseExtensions('pdf');
9. 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 ..
}
10. 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
11. 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
13. ENCRYPTING PDF FILES
• Protect against viewing, printing, editing and more
• pdftk binary from PDFLabs
• 128 bit encryption
• Second pass encryption
• Encrypt existing PDF documents
14. 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