TigerZF
🌐Español

55.4. Trabajando con Páginas

55.4.1. Creación de Páginas

Las páginas de un documento PDF se representan como instancias de Zend_Pdf_Page en Zend_Pdf.

Las páginas PDF se cargan a partir de un PDF existente o se crean usando la API de Zend_Pdf.

Se pueden crear nuevas páginas instanciando directamente nuevos objetos Zend_Pdf_Page o llamando al método Zend_Pdf::newPage(), que devuelve un objeto Zend_Pdf_Page. Zend_Pdf::newPage() crea una página que ya está adjunta a un documento. Las páginas adjuntas no pueden usarse con otros documentos PDF hasta que no se clonen. Vea la sección Clonación de páginas para más detalles.

El método Zend_Pdf::newPage() y el constructor de Zend_Pdf_Page reciben los mismos parámetros para especificar el tamaño de página. Pueden recibir tanto el tamaño de la página ($x, $y) en puntos (1/72 de pulgada) o una constante predefinida que representa un tipo de página:

  • Zend_Pdf_Page::SIZE_A4

  • Zend_Pdf_Page::SIZE_A4_LANDSCAPE

  • Zend_Pdf_Page::SIZE_LETTER

  • Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE

Las páginas del documento se almacenan en el atributo público $pages de la clase Zend_Pdf. El atributo contiene un arreglo de objetos Zend_Pdf_Page y define completamente las instancias y el orden de las páginas. Este arreglo puede manipularse como cualquier otro arreglo PHP:

Ejemplo 55.4. Gestión de páginas de un documento PDF

...
// 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]);

...

55.4.2. Clonación de páginas

Una página PDF existente puede duplicarse creando un nuevo objeto Zend_Pdf_Page con la página existente como parámetro:

Ejemplo 55.5. Duplicación de una página existente

...
// 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;
...

// Add another page
$page2 = new Zend_Pdf_Page($template);
$page2->drawText('Another text...', $x, $y);
$pdf->pages[] = $page2;
...

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

...

Esto es útil si necesita crear varias páginas usando una plantilla.

[Caution] Precaución

¡Importante! La página duplicada comparte algunos recursos PDF con una página de plantilla, por lo que solo puede usarse dentro del mismo documento que la página de plantilla. El documento modificado puede guardarse como uno nuevo.

El operador clone puede usarse para crear una página que no esté adjunta a ningún documento. Toma más tiempo que duplicar una página ya que necesita copiar todos los objetos dependientes (fuentes, imágenes y otros recursos utilizados), pero permite usar páginas de distintos documentos de origen para crear uno nuevo:

Ejemplo 55.6. Clonación de una página existente

$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;

Si se planea usar varias páginas de plantilla como plantillas, puede resultar más eficiente utilizar la clase Zend_Pdf_Resource_Extractor, que ofrece la capacidad de compartir recursos entre páginas clonadas: fuentes, imágenes, etc. (de lo contrario se creará una nueva copia del recurso para cada página clonada):

Ejemplo 55.7. Clonación de una página existente usando la clase Zend_Pdf_Resource_Extractor

$extractor = new Zend_Pdf_Resource_Extractor();
....
$page1 = $extractor->clonePage($pdf->pages[$templatePageIndex1]);
$page2 = $extractor->clonePage($pdf->pages[$templatePageIndex2]);
$page1->drawText('Some text...', $x, $y);
$page2->drawText('Another text...', $x, $y);
...
$pdf = new Zend_Pdf();
$pdf->pages[] = $page1;
$pdf->pages[] = $page2;