# Trabalhando com Páginas

## Criação de Página

As páginas em um documento PDF são representadas como instâncias de `Zend_Pdf_Page` em `Zend_Pdf`.

Páginas PDF podem ser carregadas de um PDF existente ou criadas usando a API de `Zend_Pdf`.

Novas páginas podem ser criadas instanciando novos objetos `Zend_Pdf_Page` diretamente ou chamando o método `Zend_Pdf::newPage()`, que retorna um objeto `Zend_Pdf_Page`. `Zend_Pdf::newPage()` cria uma página já anexada à um documento. Páginas anexadas não podem ser usadas com outros documentos PDF até que não esteja clonado. Veja a seção Clonagem de página para obter mais detalhes.

O método `Zend_Pdf::newPage()` e o construtor `Zend_Pdf_Page` recebem os mesmos parâmetros de definição do tamanho da página. Eles podem receber tanto o tamanho da página ($x, $y) em pontos (1/72 polegadas) quanto uma constante pré-definida representando um 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

As páginas de um documento são armazenadas no atributo público `$pages` da classe `Zend_Pdf`. O atributo contém uma matriz de objetos `Zend_Pdf_Page` e define completamente as instâncias e ordem das páginas. Esta matriz pode ser manipulada como qualquer outra matriz do PHP:

### Gerenciamento de páginas de documentos PDF

    ...
    // Inverte a ordem das páginas
    $pdf->pages = array_reverse($pdf->pages);
    ...
    // Adiciona nova página
    $pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
    // Adiciona nova página
    $pdf->pages[] = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);

    // Remove uma página específica
    unset($pdf->pages[$id]);

    ...

## Clonagem de página

Páginas PDF podem ser duplicadas através da criação de um novo objeto `Zend_Pdf_Page` com uma página já existente como parâmetro:

### Duplicando páginas existentes

    ...
    // Armazena a página template em uma variável separada
    $template = $pdf->pages[$templatePageIndex];
    ...
    // Adiciona nova página
    $page1 = new Zend_Pdf_Page($template);
    $page1->drawText('Algum texto...', $x, $y);
    $pdf->pages[] = $page1;
    ...

    // Adiciona outra página
    $page2 = new Zend_Pdf_Page($template);
    $page2->drawText('Outro texto...', $x, $y);
    $pdf->pages[] = $page2;
    ...

    // Remove a fonte da página template dos documentos
    unset($pdf->pages[$templatePageIndex]);

    ...

É útil caso você precise criar diversas páginas usando um template.

Importante! Uma página duplicada compartilha alguns recursos do PDF com uma página template, então ela só pode ser usada no mesmo documento como uma página template. Um documento modificado pode ser salvo como um novo documento.

`clone` operator may be used to create page which is not attached to any document. It takes more time than duplicating page since it needs to copy all dependent objects (used fonts, images and other resources), but it allows to use pages from different source documents to create new one:

### Cloning existing page

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

If several template pages are planned to be used as templates then it could be more efficient to utilize `Zend_Pdf_Resource_Extractor` class which gives an ability to share resources between cloned pages - fonts, images, etc. (otherwise new resource copy will be created for each cloned page):

### Cloning existing page using `Zend_Pdf_Resource_Extractor` class

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