SlideShare a Scribd company logo
1 of 30
Dennis De Cock
PHPBenelux meeting, 2010, Houthalen
About me
 Independent consultant
 Owner of DE COCK ICT, company specialized in PHP / ZF / Drupal
development
Sponsors
About this presentation
 The intro
 Requirements
 Creating and loading
 Saving
 Working with pages
 Page sizes
 Duplication and cloning
 Colors & fonts
 Text & image drawing
 Styles
 Advanced topics
Zend_PDF: the intro
 Create or load pdf files
 Manipulate pages within documents, reorder, delete, and so on…
 Drawing possibilities for shapes, lines, …)
 Drawing of text using 14 built-in fonts or use own TrueType Fonts
 Image drawing (JPG, PNG [Up to 8bit per channel+Alpha] and TIFF images
are supported)
Requirements
 Zend_PDF is a component that can be found in the standard Zend library
 Latest Zend library available from http://framework.zend.com/download/latest
Folder structure
How to integrate
 Use the autoloader for automatic load of the module when needed (or load it
yourself without ) :
protected function _initAutoload() {
$moduleLoader = new Zend_Application_Module_Autoloader(
array(
'namespace' => ‘demo',
'basePath' => APPLICATION_PATH
)
);
return $moduleLoader;
}
Creating and loading
 One way to create a new pdf document:
 Two ways to load an existing document:
 Load it from a file:
 Load it from a string:
$pdf = new Zend_Pdf();
$pdf = Zend_Pdf::load($fileName);
$pdf = Zend_Pdf::parse($pdfString);
Saving
 Save a pdf document as a file:
 Update an existing file by using true as second parameter:
 You can also render the pdf to a string (example for passing through http)
$pdf->save(‘demo.pdf');
$pdf->save(‘demo.pdf‘, true);
$pdfData = $pdf->render();
Working with pages
 Add a page to an existing file:
 Remove a page from an existing file:
 Reverse page order:
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
unset($pdf->pages[$id]);
$pdf->pages = array_reverse($pdf->pages);
Page sizes, some possibilities
 Specify a specific size:
Some other possibilities are:
 Use x and y coords to define your page:
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
$page = $pdf->newPage(200, 400);
$pdf->pages[] = $page;
Zend_Pdf_Page::SIZE_A4_LANDSCAPE
Zend_Pdf_Page::SIZE_LETTER
Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE
Page sizes, some possibilities
 Get the height and width from a pdf page:
$page = $pdf->pages[$id];
$width = $page->getWidth();
$height = $page->getHeight();
Duplicating pages
 Duplicate a page from a pdf document to create pages faster
 Duplicated pages share resources from the template page so you can only duplicate
within the same file
// Store template page in a separate variable
$template = $pdf->pages[$templatePageIndex];
// Add new page
$page1 = new Zend_Pdf_Page($template);
$page1->drawText('Some text...', $x, $y);
$pdf->pages[] = $page1;
Cloning pages
 Clone a page from any document. PDF resources are copied, so you are
not bound to the same document.
$page1 = clone $pdf1->pages[$templatePageIndex1];
$page2 = clone $pdf2->pages[$templatePageIndex2];
$page1->drawText('Some text...', $x, $y);
$page2->drawText('Another text...', $x, $y);
$pdf = new Zend_Pdf();
$pdf->pages[] = $page1;
$pdf->pages[] = $page2;
Colors
 Zend_Pdf_Color supports grayscale, rgb and cmyk
 Html style colors are also supported through Zend_Pdf_Color_Html
// $grayLevel (float number). 0.0 (black) - 1.0 (white)
$color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
// $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);
// $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);
$color1 = new Zend_Pdf_Color_Html('#3366FF');
Fonts at your disposal
 Specify a font to use:
Some other possibilities are:
$page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA),
12);
Zend_Pdf_Font::FONT_COURIER
Zend_Pdf_Font::FONT_COURIER_BOLD
Zend_Pdf_Font::FONT_COURIER_ITALIC
Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC
Zend_Pdf_Font::FONT_TIMES
Zend_Pdf_Font::FONT_TIMES_BOLD
Zend_Pdf_Font::FONT_TIMES_ITALIC
Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC
Zend_Pdf_Font::FONT_HELVETICA
Zend_Pdf_Font::FONT_HELVETICA_BOLD
Zend_Pdf_Font::FONT_HELVETICA_ITALIC
Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC
Zend_Pdf_Font::FONT_SYMBOL
Zend_Pdf_Font::FONT_ZAPFDINGBATS
Use your own fonts
 Only truetype fonts can be used, create the font:
 Then use the font on the page:
$myFont = Zend_Pdf_Font::fontWithPath('/path/to/my/special/font__.TTF');
$page->setFont($myFont, 12);
An error with a custom font?
 Errors can arise with embedding the font into the file or compressing the font.
 You can use the following options to handle these errors:
 Zend_Pdf_Font::EMBED_DONT_EMBED
Do not embed the font
 Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
Do not throw the error
 Zend_Pdf_Font::EMBED_DONT_COMPRESS
Do not compress
 You can combine the above options to match your specific solution.
Adding text to the page
 Function drawtext needs 3 parameters
drawText($text, $x, $y);
 Optional you can specify character encoding as fourth parameter:
drawText($text, $x, $y, $charEncoding = ‘’);
 Example:
$page->drawText('Hello world!', 50, 600 );
Adding shapes to the page
 Different possibilities for shape drawing:
 drawLine($x1, $y1, $x2, $y2)
 drawRectangle($x1, $y1, $x2, $y2,
$fillType =
Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE)
 drawRoundedRectangle($x1, $y1, $x2, $y2, $radius,
$fillType =
Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE)
 drawPolygon($x, $y, $fillType =
Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
$fillMethod =
Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING)
 drawCircle($x, $y, $radius, $param4 = null, $param5 = null, $param6 = null)
Adding images to the page
 JPG, PNG and TIFF images are now supported
 An example:
// Load the image
$image = Zend_Pdf_Image::imageWithPath(APPLICATION_FRONT .
'/images/logo.tif');
// Draw image
$page->drawImage($image, 40, 764, 240, 820);
// -> $image, $left, $bottom, $right, $top
An example in detail
 Here’s a more complete example and the result:
$pdf = new Zend_Pdf();
$page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $page;
$page->setFont(Zend_Pdf_Font::fontWithName(
Zend_Pdf_Font::FONT_HELVETICA), 12);
$page->drawText('Hello world!', 50, 600 );
$image = Zend_Pdf_Image::imageWithPath(APPLICATION_FRONT .
'/images/logo.tif');
$page->drawImage($image, 40, 764, 240, 820);
$page->drawLine(50, 755, 545, 755);
$pdf->save('demo.pdf');
The result
Using styles
 Create styles to combine your own specific layout of pdf in one place:
 After creating the style, add some elements to your style
 Apply the style
$mystyle = new Zend_Pdf_Style();
$mystyle->setFont(Zend_Pdf_Font::fontWithName(
Zend_Pdf_Font::FONT_HELVETICA), 12);
$mystyle->Zend_Pdf_Color_Rgb(1, 1, 0));
$mystyle->setLineWidth(1);
$page1->setStyle($mystyle);
Document info
 Add information to your document through the properties:
$pdf = Zend_Pdf::load($pdfPath);
echo $pdf->properties[‘Demo'] . "n";
echo $pdf->properties[‘Dennis'] . "n";
$pdf->properties['Title'] = ‘Demo';
$pdf->save($pdfPath);
Advanced topics
 Zend_Pdf_Resource_Extractor class for cloning pages and share resources
through the different templates
 Linear transformations, most of them are available as from ZF 1,8
(skew, scale, …)
Summary
 Zend_PDF has powerful capabilities
 Combining the extended pdf class on framework.zend.com makes life a little
easier
Recommended reading
http://devzone.zend.com/article/2525
Zend_PDF tutorial by Cal Evans
Thank you!
Questions?

More Related Content

Similar to Introduction to Zend_Pdf

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011David Carr
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Shinya Ohyanagi
 
Zend Framework Components for non-framework Development
Zend Framework Components for non-framework DevelopmentZend Framework Components for non-framework Development
Zend Framework Components for non-framework DevelopmentShahar Evron
 
Display Suite: A Themers Perspective
Display Suite: A Themers PerspectiveDisplay Suite: A Themers Perspective
Display Suite: A Themers PerspectiveMediacurrent
 
Zend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessionsZend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessionsTricode (part of Dept)
 
Drupaljam xl 2019 presentation multilingualism makes better programmers
Drupaljam xl 2019 presentation   multilingualism makes better programmersDrupaljam xl 2019 presentation   multilingualism makes better programmers
Drupaljam xl 2019 presentation multilingualism makes better programmersAlexander Varwijk
 
Model-View-Update, and Beyond!
Model-View-Update, and Beyond!Model-View-Update, and Beyond!
Model-View-Update, and Beyond!Simon Fowler
 
EPiServer report generation
EPiServer report generationEPiServer report generation
EPiServer report generationPaul Graham
 
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)Drupaltour
 
Vancouver League of Drupallers - Remembering the User (August 2008)
Vancouver League of Drupallers - Remembering the User (August 2008)Vancouver League of Drupallers - Remembering the User (August 2008)
Vancouver League of Drupallers - Remembering the User (August 2008)baronmunchowsen
 
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)James Titcumb
 
Introduction to Zend framework
Introduction to Zend framework Introduction to Zend framework
Introduction to Zend framework Matteo Magni
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018Adam Tomat
 
Drupalcon 2023 - How Drupal builds your pages.pdf
Drupalcon 2023 - How Drupal builds your pages.pdfDrupalcon 2023 - How Drupal builds your pages.pdf
Drupalcon 2023 - How Drupal builds your pages.pdfLuca Lusso
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pagessparkfabrik
 
Designing well known websites with ADF Rich Faces
Designing well known websites with ADF Rich FacesDesigning well known websites with ADF Rich Faces
Designing well known websites with ADF Rich Facesmaikorocha
 
Practical PHP by example Jan Leth-Kjaer
Practical PHP by example   Jan Leth-KjaerPractical PHP by example   Jan Leth-Kjaer
Practical PHP by example Jan Leth-KjaerCOMMON Europe
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin GeneratorJohn Cleveley
 

Similar to Introduction to Zend_Pdf (20)

TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011Introduction to Plugin Programming, WordCamp Miami 2011
Introduction to Plugin Programming, WordCamp Miami 2011
 
Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2
 
Zend Framework Components for non-framework Development
Zend Framework Components for non-framework DevelopmentZend Framework Components for non-framework Development
Zend Framework Components for non-framework Development
 
Display Suite: A Themers Perspective
Display Suite: A Themers PerspectiveDisplay Suite: A Themers Perspective
Display Suite: A Themers Perspective
 
Zend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessionsZend framework 06 - zend config, pdf, i18n, l10n, sessions
Zend framework 06 - zend config, pdf, i18n, l10n, sessions
 
Drupaljam xl 2019 presentation multilingualism makes better programmers
Drupaljam xl 2019 presentation   multilingualism makes better programmersDrupaljam xl 2019 presentation   multilingualism makes better programmers
Drupaljam xl 2019 presentation multilingualism makes better programmers
 
Model-View-Update, and Beyond!
Model-View-Update, and Beyond!Model-View-Update, and Beyond!
Model-View-Update, and Beyond!
 
EPiServer report generation
EPiServer report generationEPiServer report generation
EPiServer report generation
 
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
DrupalTour. Rivne — Drupal 8 (Ivan Tibezh, InternetDevels)
 
Vancouver League of Drupallers - Remembering the User (August 2008)
Vancouver League of Drupallers - Remembering the User (August 2008)Vancouver League of Drupallers - Remembering the User (August 2008)
Vancouver League of Drupallers - Remembering the User (August 2008)
 
WEB DEVELOPMENT
WEB DEVELOPMENTWEB DEVELOPMENT
WEB DEVELOPMENT
 
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
Kicking off with Zend Expressive and Doctrine ORM (PHP Srbija 2017)
 
Introduction to Zend framework
Introduction to Zend framework Introduction to Zend framework
Introduction to Zend framework
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018
 
Drupalcon 2023 - How Drupal builds your pages.pdf
Drupalcon 2023 - How Drupal builds your pages.pdfDrupalcon 2023 - How Drupal builds your pages.pdf
Drupalcon 2023 - How Drupal builds your pages.pdf
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages
 
Designing well known websites with ADF Rich Faces
Designing well known websites with ADF Rich FacesDesigning well known websites with ADF Rich Faces
Designing well known websites with ADF Rich Faces
 
Practical PHP by example Jan Leth-Kjaer
Practical PHP by example   Jan Leth-KjaerPractical PHP by example   Jan Leth-Kjaer
Practical PHP by example Jan Leth-Kjaer
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 

Recently uploaded

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 

Introduction to Zend_Pdf

  • 1. Dennis De Cock PHPBenelux meeting, 2010, Houthalen
  • 2. About me  Independent consultant  Owner of DE COCK ICT, company specialized in PHP / ZF / Drupal development
  • 4. About this presentation  The intro  Requirements  Creating and loading  Saving  Working with pages  Page sizes  Duplication and cloning  Colors & fonts  Text & image drawing  Styles  Advanced topics
  • 5. Zend_PDF: the intro  Create or load pdf files  Manipulate pages within documents, reorder, delete, and so on…  Drawing possibilities for shapes, lines, …)  Drawing of text using 14 built-in fonts or use own TrueType Fonts  Image drawing (JPG, PNG [Up to 8bit per channel+Alpha] and TIFF images are supported)
  • 6. Requirements  Zend_PDF is a component that can be found in the standard Zend library  Latest Zend library available from http://framework.zend.com/download/latest
  • 8. How to integrate  Use the autoloader for automatic load of the module when needed (or load it yourself without ) : protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader( array( 'namespace' => ‘demo', 'basePath' => APPLICATION_PATH ) ); return $moduleLoader; }
  • 9. Creating and loading  One way to create a new pdf document:  Two ways to load an existing document:  Load it from a file:  Load it from a string: $pdf = new Zend_Pdf(); $pdf = Zend_Pdf::load($fileName); $pdf = Zend_Pdf::parse($pdfString);
  • 10. Saving  Save a pdf document as a file:  Update an existing file by using true as second parameter:  You can also render the pdf to a string (example for passing through http) $pdf->save(‘demo.pdf'); $pdf->save(‘demo.pdf‘, true); $pdfData = $pdf->render();
  • 11. Working with pages  Add a page to an existing file:  Remove a page from an existing file:  Reverse page order: $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); $pdf->pages[] = $page; unset($pdf->pages[$id]); $pdf->pages = array_reverse($pdf->pages);
  • 12. Page sizes, some possibilities  Specify a specific size: Some other possibilities are:  Use x and y coords to define your page: $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); $pdf->pages[] = $page; $page = $pdf->newPage(200, 400); $pdf->pages[] = $page; Zend_Pdf_Page::SIZE_A4_LANDSCAPE Zend_Pdf_Page::SIZE_LETTER Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE
  • 13. Page sizes, some possibilities  Get the height and width from a pdf page: $page = $pdf->pages[$id]; $width = $page->getWidth(); $height = $page->getHeight();
  • 14. Duplicating pages  Duplicate a page from a pdf document to create pages faster  Duplicated pages share resources from the template page so you can only duplicate within the same file // Store template page in a separate variable $template = $pdf->pages[$templatePageIndex]; // Add new page $page1 = new Zend_Pdf_Page($template); $page1->drawText('Some text...', $x, $y); $pdf->pages[] = $page1;
  • 15. Cloning pages  Clone a page from any document. PDF resources are copied, so you are not bound to the same document. $page1 = clone $pdf1->pages[$templatePageIndex1]; $page2 = clone $pdf2->pages[$templatePageIndex2]; $page1->drawText('Some text...', $x, $y); $page2->drawText('Another text...', $x, $y); $pdf = new Zend_Pdf(); $pdf->pages[] = $page1; $pdf->pages[] = $page2;
  • 16. Colors  Zend_Pdf_Color supports grayscale, rgb and cmyk  Html style colors are also supported through Zend_Pdf_Color_Html // $grayLevel (float number). 0.0 (black) - 1.0 (white) $color1 = new Zend_Pdf_Color_GrayScale($grayLevel); // $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity) $color2 = new Zend_Pdf_Color_Rgb($r, $g, $b); // $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity) $color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k); $color1 = new Zend_Pdf_Color_Html('#3366FF');
  • 17. Fonts at your disposal  Specify a font to use: Some other possibilities are: $page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 12); Zend_Pdf_Font::FONT_COURIER Zend_Pdf_Font::FONT_COURIER_BOLD Zend_Pdf_Font::FONT_COURIER_ITALIC Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC Zend_Pdf_Font::FONT_TIMES Zend_Pdf_Font::FONT_TIMES_BOLD Zend_Pdf_Font::FONT_TIMES_ITALIC Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC Zend_Pdf_Font::FONT_HELVETICA Zend_Pdf_Font::FONT_HELVETICA_BOLD Zend_Pdf_Font::FONT_HELVETICA_ITALIC Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC Zend_Pdf_Font::FONT_SYMBOL Zend_Pdf_Font::FONT_ZAPFDINGBATS
  • 18. Use your own fonts  Only truetype fonts can be used, create the font:  Then use the font on the page: $myFont = Zend_Pdf_Font::fontWithPath('/path/to/my/special/font__.TTF'); $page->setFont($myFont, 12);
  • 19. An error with a custom font?  Errors can arise with embedding the font into the file or compressing the font.  You can use the following options to handle these errors:  Zend_Pdf_Font::EMBED_DONT_EMBED Do not embed the font  Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION Do not throw the error  Zend_Pdf_Font::EMBED_DONT_COMPRESS Do not compress  You can combine the above options to match your specific solution.
  • 20. Adding text to the page  Function drawtext needs 3 parameters drawText($text, $x, $y);  Optional you can specify character encoding as fourth parameter: drawText($text, $x, $y, $charEncoding = ‘’);  Example: $page->drawText('Hello world!', 50, 600 );
  • 21. Adding shapes to the page  Different possibilities for shape drawing:  drawLine($x1, $y1, $x2, $y2)  drawRectangle($x1, $y1, $x2, $y2, $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE)  drawRoundedRectangle($x1, $y1, $x2, $y2, $radius, $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE)  drawPolygon($x, $y, $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE, $fillMethod = Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING)  drawCircle($x, $y, $radius, $param4 = null, $param5 = null, $param6 = null)
  • 22. Adding images to the page  JPG, PNG and TIFF images are now supported  An example: // Load the image $image = Zend_Pdf_Image::imageWithPath(APPLICATION_FRONT . '/images/logo.tif'); // Draw image $page->drawImage($image, 40, 764, 240, 820); // -> $image, $left, $bottom, $right, $top
  • 23. An example in detail  Here’s a more complete example and the result: $pdf = new Zend_Pdf(); $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4); $pdf->pages[] = $page; $page->setFont(Zend_Pdf_Font::fontWithName( Zend_Pdf_Font::FONT_HELVETICA), 12); $page->drawText('Hello world!', 50, 600 ); $image = Zend_Pdf_Image::imageWithPath(APPLICATION_FRONT . '/images/logo.tif'); $page->drawImage($image, 40, 764, 240, 820); $page->drawLine(50, 755, 545, 755); $pdf->save('demo.pdf');
  • 25. Using styles  Create styles to combine your own specific layout of pdf in one place:  After creating the style, add some elements to your style  Apply the style $mystyle = new Zend_Pdf_Style(); $mystyle->setFont(Zend_Pdf_Font::fontWithName( Zend_Pdf_Font::FONT_HELVETICA), 12); $mystyle->Zend_Pdf_Color_Rgb(1, 1, 0)); $mystyle->setLineWidth(1); $page1->setStyle($mystyle);
  • 26. Document info  Add information to your document through the properties: $pdf = Zend_Pdf::load($pdfPath); echo $pdf->properties[‘Demo'] . "n"; echo $pdf->properties[‘Dennis'] . "n"; $pdf->properties['Title'] = ‘Demo'; $pdf->save($pdfPath);
  • 27. Advanced topics  Zend_Pdf_Resource_Extractor class for cloning pages and share resources through the different templates  Linear transformations, most of them are available as from ZF 1,8 (skew, scale, …)
  • 28. Summary  Zend_PDF has powerful capabilities  Combining the extended pdf class on framework.zend.com makes life a little easier

Editor's Notes

  1. Working with php for 5 years Develop webapplications and services for medium sized companies Working with zend for 1 year
  2. Special thanks to Inventis for the accomodation.
  3. $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender();