Working with Pages

Page Creation

The pages in a PDF document are represented as Zend_Pdf_Page instances in Zend_Pdf.

PDF pages either are loaded from an existing PDF or created using the Zend_Pdf API.

New pages can be created by instantiating new Zend_Pdf_Page objects directly or by calling the Zend_Pdf::newPage() method, which returns a Zend_Pdf_Page object. Zend_Pdf::newPage() creates a page that is already attached to a document. Unattached pages can't be used with multiple PDF documents, but they are somewhat more performant. [1]

The Zend_Pdf::newPage() method and the Zend_Pdf_Page constructor take the same parameters specifying page size. They can take either the size of page ($x, $y) in points (1/72 inch) or a predefined constant representing a page type:

  • Zend_Pdf_Page::SIZE_A4

  • Zend_Pdf_Page::SIZE_A4_LANDSCAPE

  • Zend_Pdf_Page::SIZE_LETTER

  • Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE

Document pages are stored in the $pages public attribute of the Zend_Pdf class. The attribute holds an array of Zend_Pdf_Page objects and completely defines the instances and order of pages. This array can be manipulated like any other PHP array:

Example #1 PDF document pages management

  1. ...
  2. // Reverse page order
  3. $pdf->pages = array_reverse($pdf->pages);
  4. ...
  5. // Add new page
  6. $pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
  7. // Add new page
  8. $pdf->pages[] = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
  9.  
  10. // Remove specified page.
  11. unset($pdf->pages[$id]);
  12.  
  13. ...

Page cloning

Existing PDF page can be cloned by creating new Zend_Pdf_Page object with existing page as a parameter:

Example #2 Cloning existing page

  1. ...
  2. // Store template page in a separate variable
  3. $template = $pdf->pages[$templatePageIndex];
  4. ...
  5. // Add new page
  6. $page1 = new Zend_Pdf_Page($template);
  7. $pdf->pages[] = $page1;
  8. ...
  9.  
  10. // Add another page
  11. $page2 = new Zend_Pdf_Page($template);
  12. $pdf->pages[] = $page2;
  13. ...
  14.  
  15. // Remove source template page from the documents.
  16. unset($pdf->pages[$templatePageIndex]);
  17.  
  18. ...

It's useful if you need several pages to be created using one template.

Caution

Important! Cloned page shares some PDF resources with a template page, so it can be used only within the same document as a template page. Modified document can be saved as new one.

[1] It's a limitation of current Zend Framework version. It will be eliminated in future versions. But unattached pages will always give better (more optimal) result for sharing pages between documents.
blog comments powered by Disqus