• Save

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Introduction to Zend_Pdf

on

  • 9,808 views

 

Statistics

Views

Total Views
9,808
Views on SlideShare
9,798
Embed Views
10

Actions

Likes
3
Downloads
0
Comments
0

4 Embeds 10

https://www.linkedin.com 4
http://www.linkedin.com 3
http://a0.twimg.com 2
http://static.slidesharecdn.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Working with php for 5 years Develop webapplications and services for medium sized companies Working with zend for 1 year
  • Special thanks to Inventis for the accomodation.
  • $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender();

Introduction to Zend_Pdf Introduction to Zend_Pdf Presentation Transcript

  • 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'] . " "; echo $pdf->properties[‘Dennis'] . " ";   $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?