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

Probability Density Function (PDF)
Probability Density Function (PDF)Probability Density Function (PDF)
Probability Density Function (PDF)AakankshaR
 
Lecture 6 Point and Interval Estimation.pptx
Lecture 6 Point and Interval Estimation.pptxLecture 6 Point and Interval Estimation.pptx
Lecture 6 Point and Interval Estimation.pptxshakirRahman10
 
Hypothesis Tests in R Programming
Hypothesis Tests in R ProgrammingHypothesis Tests in R Programming
Hypothesis Tests in R ProgrammingAtacan Garip
 
Applications of t, f and chi2 distributions
Applications of t, f and chi2 distributionsApplications of t, f and chi2 distributions
Applications of t, f and chi2 distributionsJMB
 
Powerpoint sampling distribution
Powerpoint sampling distributionPowerpoint sampling distribution
Powerpoint sampling distributionSusan McCourt
 
2.3. seminar,conference.research paper writing.pptx
2.3. seminar,conference.research paper writing.pptx2.3. seminar,conference.research paper writing.pptx
2.3. seminar,conference.research paper writing.pptxPrince500060
 
Chi square Test Using SPSS
Chi square Test Using SPSSChi square Test Using SPSS
Chi square Test Using SPSSDr Athar Khan
 
Correlation and Regression
Correlation and RegressionCorrelation and Regression
Correlation and RegressionShubham Mehta
 
One sample t test (procedure and output in SPSS)
One sample t test (procedure and output in SPSS)One sample t test (procedure and output in SPSS)
One sample t test (procedure and output in SPSS)Unexplord Solutions LLP
 
Correlation analysis notes
Correlation analysis notesCorrelation analysis notes
Correlation analysis notesJapheth Muthama
 
Lecture 4: Statistical Inference
Lecture 4: Statistical InferenceLecture 4: Statistical Inference
Lecture 4: Statistical InferenceMarina Santini
 
Abstract writting
Abstract writtingAbstract writting
Abstract writtingwarda aziz
 
Statistical inference: Estimation
Statistical inference: EstimationStatistical inference: Estimation
Statistical inference: EstimationParag Shah
 

What's hot (20)

Research Report
Research ReportResearch Report
Research Report
 
Probability Density Function (PDF)
Probability Density Function (PDF)Probability Density Function (PDF)
Probability Density Function (PDF)
 
Chapter08
Chapter08Chapter08
Chapter08
 
Lecture 6 Point and Interval Estimation.pptx
Lecture 6 Point and Interval Estimation.pptxLecture 6 Point and Interval Estimation.pptx
Lecture 6 Point and Interval Estimation.pptx
 
Regression analysis
Regression analysisRegression analysis
Regression analysis
 
Inferential Statistics
Inferential StatisticsInferential Statistics
Inferential Statistics
 
Hypothesis Tests in R Programming
Hypothesis Tests in R ProgrammingHypothesis Tests in R Programming
Hypothesis Tests in R Programming
 
Applications of t, f and chi2 distributions
Applications of t, f and chi2 distributionsApplications of t, f and chi2 distributions
Applications of t, f and chi2 distributions
 
Chapter 14
Chapter 14 Chapter 14
Chapter 14
 
Powerpoint sampling distribution
Powerpoint sampling distributionPowerpoint sampling distribution
Powerpoint sampling distribution
 
2.3. seminar,conference.research paper writing.pptx
2.3. seminar,conference.research paper writing.pptx2.3. seminar,conference.research paper writing.pptx
2.3. seminar,conference.research paper writing.pptx
 
Chi square Test Using SPSS
Chi square Test Using SPSSChi square Test Using SPSS
Chi square Test Using SPSS
 
Correlation and Regression
Correlation and RegressionCorrelation and Regression
Correlation and Regression
 
Chapter 09
Chapter 09 Chapter 09
Chapter 09
 
One sample t test (procedure and output in SPSS)
One sample t test (procedure and output in SPSS)One sample t test (procedure and output in SPSS)
One sample t test (procedure and output in SPSS)
 
Testing of hypothesis and Goodness of fit
Testing of hypothesis and Goodness of fitTesting of hypothesis and Goodness of fit
Testing of hypothesis and Goodness of fit
 
Correlation analysis notes
Correlation analysis notesCorrelation analysis notes
Correlation analysis notes
 
Lecture 4: Statistical Inference
Lecture 4: Statistical InferenceLecture 4: Statistical Inference
Lecture 4: Statistical Inference
 
Abstract writting
Abstract writtingAbstract writting
Abstract writting
 
Statistical inference: Estimation
Statistical inference: EstimationStatistical inference: Estimation
Statistical inference: Estimation
 

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

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 

Recently uploaded (20)

Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

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