Zend_Pdf-Pages.xml 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.pdf.pages">
  5. <title>Trabalhando com Páginas</title>
  6. <sect2 id="zend.pdf.pages.creation">
  7. <title>Criação de Página</title>
  8. <para>
  9. As páginas em um documento <acronym>PDF</acronym> são representadas como instâncias de
  10. <classname>Zend_Pdf_Page</classname> em <classname>Zend_Pdf</classname>.
  11. </para>
  12. <para>
  13. Páginas <acronym>PDF</acronym> podem ser carregadas de um <acronym>PDF</acronym>
  14. existente ou criadas usando a <acronym>API</acronym> de <classname>Zend_Pdf</classname>.
  15. </para>
  16. <para>
  17. Novas páginas podem ser criadas instanciando novos objetos
  18. <classname>Zend_Pdf_Page</classname> diretamente ou chamando o método
  19. <methodname>Zend_Pdf::newPage()</methodname>, que retorna um objeto
  20. <classname>Zend_Pdf_Page</classname>. <methodname>Zend_Pdf::newPage()</methodname> cria
  21. uma página já anexada à um documento. Páginas anexadas não podem ser usadas com outros
  22. documentos <acronym>PDF</acronym> até que não esteja clonado. Veja a seção <link
  23. linkend="zend.pdf.pages.cloning">Clonagem de página</link> para obter mais detalhes.
  24. </para>
  25. <para>
  26. O método <methodname>Zend_Pdf::newPage()</methodname> e o construtor
  27. <classname>Zend_Pdf_Page</classname> recebem os mesmos parâmetros de definição do
  28. tamanho da página. Eles podem receber tanto o tamanho da página ($x, $y) em pontos
  29. (1/72 polegadas) quanto uma constante pré-definida representando um tipo de página:
  30. <itemizedlist>
  31. <listitem><para>Zend_Pdf_Page::SIZE_A4</para></listitem>
  32. <listitem><para>Zend_Pdf_Page::SIZE_A4_LANDSCAPE</para></listitem>
  33. <listitem><para>Zend_Pdf_Page::SIZE_LETTER</para></listitem>
  34. <listitem><para>Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE</para></listitem>
  35. </itemizedlist>
  36. </para>
  37. <para>
  38. As páginas de um documento são armazenadas no atributo público <varname>$pages</varname>
  39. da classe <classname>Zend_Pdf</classname>. O atributo contém uma matriz de objetos
  40. <classname>Zend_Pdf_Page</classname> e define completamente as instâncias e ordem das
  41. páginas. Esta matriz pode ser manipulada como qualquer outra matriz do
  42. <acronym>PHP</acronym>:
  43. </para>
  44. <example id="zend.pdf.pages.example-1">
  45. <title>Gerenciamento de páginas de documentos PDF</title>
  46. <programlisting language="php"><![CDATA[
  47. ...
  48. // Inverte a ordem das páginas
  49. $pdf->pages = array_reverse($pdf->pages);
  50. ...
  51. // Adiciona nova página
  52. $pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
  53. // Adiciona nova página
  54. $pdf->pages[] = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
  55. // Remove uma página específica
  56. unset($pdf->pages[$id]);
  57. ...
  58. ]]></programlisting>
  59. </example>
  60. </sect2>
  61. <sect2 id="zend.pdf.pages.cloning">
  62. <title>Clonagem de página</title>
  63. <para>
  64. Páginas <acronym>PDF</acronym> podem ser duplicadas através da criação de um novo objeto
  65. <classname>Zend_Pdf_Page</classname> com uma página já existente como parâmetro:
  66. </para>
  67. <example id="zend.pdf.pages.example-2">
  68. <title>Duplicando páginas existentes</title>
  69. <programlisting language="php"><![CDATA[
  70. ...
  71. // Armazena a página template em uma variável separada
  72. $template = $pdf->pages[$templatePageIndex];
  73. ...
  74. // Adiciona nova página
  75. $page1 = new Zend_Pdf_Page($template);
  76. $page1->drawText('Algum texto...', $x, $y);
  77. $pdf->pages[] = $page1;
  78. ...
  79. // Adiciona outra página
  80. $page2 = new Zend_Pdf_Page($template);
  81. $page2->drawText('Outro texto...', $x, $y);
  82. $pdf->pages[] = $page2;
  83. ...
  84. // Remove a fonte da página template dos documentos
  85. unset($pdf->pages[$templatePageIndex]);
  86. ...
  87. ]]></programlisting>
  88. </example>
  89. <para>
  90. É útil caso você precise criar diversas páginas usando um template.
  91. </para>
  92. <caution>
  93. <para>
  94. Importante! Uma página duplicada compartilha alguns recursos do
  95. <acronym>PDF</acronym> com uma página template, então ela só pode ser usada no mesmo
  96. documento como uma página template. Um documento modificado pode ser salvo como um
  97. novo documento.
  98. </para>
  99. </caution>
  100. <para>
  101. <code>clone</code> operator may be used to create page which is not attached to any
  102. document. It takes more time than duplicating page since it needs to copy all dependent
  103. objects (used fonts, images and other resources), but it allows to use pages from
  104. different source documents to create new one:
  105. </para>
  106. <example id="zend.pdf.pages.example-3">
  107. <title>Cloning existing page</title>
  108. <programlisting language="php"><![CDATA[
  109. $page1 = clone $pdf1->pages[$templatePageIndex1];
  110. $page2 = clone $pdf2->pages[$templatePageIndex2];
  111. $page1->drawText('Some text...', $x, $y);
  112. $page2->drawText('Another text...', $x, $y);
  113. ...
  114. $pdf = new Zend_Pdf();
  115. $pdf->pages[] = $page1;
  116. $pdf->pages[] = $page2;
  117. ]]></programlisting>
  118. </example>
  119. <para>
  120. If several template pages are planned to be used as templates then it could be more
  121. efficient to utilize <classname>Zend_Pdf_Resource_Extractor</classname> class which
  122. gives an ability to share resources between cloned pages - fonts, images, etc.
  123. (otherwise new resource copy will be created for each cloned page):
  124. </para>
  125. <example id="zend.pdf.pages.example-4">
  126. <title>
  127. Cloning existing page using <classname>Zend_Pdf_Resource_Extractor</classname> class
  128. </title>
  129. <programlisting language="php"><![CDATA[
  130. $extractor = new Zend_Pdf_Resource_Extractor();
  131. ....
  132. $page1 = $extractor->clonePage($pdf->pages[$templatePageIndex1]);
  133. $page2 = $extractor->clonePage($pdf->pages[$templatePageIndex2]);
  134. $page1->drawText('Some text...', $x, $y);
  135. $page2->drawText('Another text...', $x, $y);
  136. ...
  137. $pdf = new Zend_Pdf();
  138. $pdf->pages[] = $page1;
  139. $pdf->pages[] = $page2;
  140. ]]></programlisting>
  141. </example>
  142. </sect2>
  143. </sect1>
  144. <!--
  145. vim:se ts=4 sw=4 et:
  146. -->