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

What's hot

manual-de-soldadura-2015v2.pdf
manual-de-soldadura-2015v2.pdfmanual-de-soldadura-2015v2.pdf
manual-de-soldadura-2015v2.pdfHycFamilyHerCus
 
Catalogo consumiveis-esab
Catalogo consumiveis-esabCatalogo consumiveis-esab
Catalogo consumiveis-esabPaulo Henrique
 
tablas PERFILES.pdf
tablas PERFILES.pdftablas PERFILES.pdf
tablas PERFILES.pdfmauro491963
 
Cap 7 dobramento
Cap 7   dobramentoCap 7   dobramento
Cap 7 dobramentoThrunks
 

What's hot (6)

05 eletrodo revestido
05   eletrodo revestido05   eletrodo revestido
05 eletrodo revestido
 
manual-de-soldadura-2015v2.pdf
manual-de-soldadura-2015v2.pdfmanual-de-soldadura-2015v2.pdf
manual-de-soldadura-2015v2.pdf
 
Catalogo consumiveis-esab
Catalogo consumiveis-esabCatalogo consumiveis-esab
Catalogo consumiveis-esab
 
tablas PERFILES.pdf
tablas PERFILES.pdftablas PERFILES.pdf
tablas PERFILES.pdf
 
Aula técnicas preditivas
Aula técnicas preditivasAula técnicas preditivas
Aula técnicas preditivas
 
Cap 7 dobramento
Cap 7   dobramentoCap 7   dobramento
Cap 7 dobramento
 

Similar to Introduction to Zend_Pdf

Advanced Drupal Views: Theming your View
Advanced Drupal Views: Theming your ViewAdvanced Drupal Views: Theming your View
Advanced Drupal Views: Theming your ViewRyan Cross
 
The Render API in Drupal 7
The Render API in Drupal 7The Render API in Drupal 7
The Render API in Drupal 7frandoh
 
The FPDF Library
The FPDF LibraryThe FPDF Library
The FPDF LibraryDave Ross
 
Drupal vs WordPress
Drupal vs WordPressDrupal vs WordPress
Drupal vs WordPressWalter Ebert
 
8 things to know about theming in drupal 8
8 things to know about theming in drupal 88 things to know about theming in drupal 8
8 things to know about theming in drupal 8Logan Farr
 
Disregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDisregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDaniel Cousineau
 
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
 

Similar to Introduction to Zend_Pdf (20)

Advanced Drupal Views: Theming your View
Advanced Drupal Views: Theming your ViewAdvanced Drupal Views: Theming your View
Advanced Drupal Views: Theming your View
 
The Render API in Drupal 7
The Render API in Drupal 7The Render API in Drupal 7
The Render API in Drupal 7
 
The FPDF Library
The FPDF LibraryThe FPDF Library
The FPDF Library
 
Drupal vs WordPress
Drupal vs WordPressDrupal vs WordPress
Drupal vs WordPress
 
8 things to know about theming in drupal 8
8 things to know about theming in drupal 88 things to know about theming in drupal 8
8 things to know about theming in drupal 8
 
Disregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDisregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_Form
 
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
 

Recently uploaded

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 

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();