37.4.  文档页面

37.4.1.  页面生成

PDF 文档页面摘要由 Zend_Pdf_Page 类来描绘。

PDF 页面或者从 PDF 加载,或者生成新的。

新页面可以通过创建 Zend_Pdf_Page 对象或调用 Zend_Pdf::newPage() 方法来获得,它返回 Zend_Pdf_Page 对象。Zend_Pdf::newPage() 方法生成已经附加到文档的页面,和未附加的页面不同的是它不能和若干个 PDF 文档一起用,但是性能会稍好一些。 [5]. 选择那种方式是你的自由。

Zend_Pdf::newPage() 方法和 Zend_Pdf_Page 构造器带有相同的指定页面尺寸的参数。它或者是以点(1/72 英寸)来计算的页面的尺寸($x,$y),或者以预先定义的常数来计算,常数就是页面类型:

  • Zend_Pdf_Page::SIZE_A4

  • Zend_Pdf_Page::SIZE_A4_LANDSCAPE

  • Zend_Pdf_Page::SIZE_LETTER

  • Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE

文档存储在 Zend_Pdf 类的 public 成员 $pages 里,它是 Zend_Pdf_Page 对象的一个数组。它完整地定义了设置和文档页面的顺序并可以以普通的数组来处理:

例 37.4. PDF 文档页面管理

<?php
    ...
    // Reverse page order
    $pdf->pages = array_reverse($pdf->pages);
    ...
    // Add new page
    $pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
    // Add new page
    $pdf->pages[] = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);

    // Remove specified page.
    unset($pdf->pages[$id]);

    ...
            

37.4.2.  页面克隆

通过用页面为参数创建 Zend_Pdf_Page 对象 PDF 页面可以被克隆:

例 37.5. Cloning existing page.

<?php
    ...
    // Store template page in a separate variable
    $template = $pdf->pages[$templatePageIndex];
    ...
    // Add new page
    $page1 = new Zend_Pdf_Page($template);
    $pdf->pages[] = $page1;
    ...

    // Add another page
    $page2 = new Zend_Pdf_Page($template);
    $pdf->pages[] = $page2;
    ...

    // Remove source template page from the documents.
    unset($pdf->pages[$templatePageIndex]);

    ...
            

如果你需要用同一个模板生成若干页面,这很有用。

[小心] 小心

重要!克隆页面用模板页面来共享一些 PDF 资源,它只可以用于使用模板页的同一个文档内。修改后的文档可当作新文件来保存。



[5] Zend_Pdf 模块的 V1.0 有点限制,会在将来的版本中改善。但未附加的页面总是为在文档间共享提供更好(更多的优化)的结果。