class fpdf

12
Class fpdf 2.1 - Começando Vamos gerar PDFs usando a classe FPDF. Veremos nessa lição quais são os métodos oferecidos pela classe e como usá-los. Nosso primeiro exemplo: <?php require_once 'fpdf.php'; $meu_pdf = new FPDF(); ?> Esse será sempre o código inicial. Incluímos o arquivo que contém a definição da classe (fpdf.php), e instanciamos um novo objeto FPDF. Em nosso exemplo, passamos a referência para a variável $meu_pdf. O construtor da classe recebe diversos parâmetros (que não são obrigatórios), como mostrado no próximo exemplo:

Upload: flaviano-silva

Post on 29-Dec-2015

36 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Class Fpdf

Class fpdf

2.1 - Começando

Vamos gerar PDFs usando a classe FPDF. Veremos nessa lição quais são os métodos oferecidos pela classe e como usá-los.

Nosso primeiro exemplo:

<?phprequire_once 'fpdf.php';

$meu_pdf = new FPDF();?>

Esse será sempre o código inicial. Incluímos o arquivo que contém a definição da classe (fpdf.php), e instanciamos um novo objeto FPDF. Em nosso exemplo, passamos a referência para a variável $meu_pdf. O construtor da classe recebe diversos parâmetros (que não são obrigatórios), como mostrado no próximo exemplo:

<?phprequire_once 'fpdf.php';

$meu_pdf = new FPDF('P', 'cm', 'A4');?>

Page 2: Class Fpdf

A lista de parâmetros é a seguinte:

1° - orientação da página: P para retrato e L para paisagem; 2° - unidade de medida padrão: cm para centímetros, pt para pontos (pixels), mm para milímetros e in para

polegadas; 3° - formato da página: A3, A4, A5, Letter, Legal.

2.2 - Configurando o documento

Assim como em um editor de texto comum, podemos fazer formatações especiais em nosso documento PDF usando a classe FPDF. Comecemos pelas margens. A formatação das margens é feita através do método SetMargins(). Esse método recebe três parâmetros: a medida da margem esquerda, da margem superior e da margem direita (este é opcional), respectivamente. É possível também definir a medida de cada margem separadamente, através dos seguintes métodos:

SetLeftMargin(tamanho), para a margem esquerda SetTopMargin(tamanho), para a margem superior SetRightMargin(tamanho), para a margem direita

Vejamos um exemplo:

<?phprequire_once 'fpdf.php';

$meu_pdf = new FPDF('P', 'cm', 'A4');

$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros?>

Para definir o autor e o título do documento, usamos os métodos SetAuthor() e SetTitle(), cujos parâmetros são, respectivamente, strings para o nome do autor e para o título do documento.

2.3 - Adição de páginas e escrita

Antes de começarmos a escrever no documento, precisamos adicionar-lhe uma página. Para tanto, usamos o método AddPage(), cujo único parâmetro (que é opcional) é a orientação da página: P para retrato e L para paisagem.

A escrita no documento não começa antes das definições de fonte e posicionamento do texto em relação à página. Os métodos a seguir são utilizados para essa tarefa:

SetFont(), para definir a fonte utilizada. Possui os seguintes parâmetros: o 1° - fonte: uma string representando o nome da fonte. As fontes permitidas são aquelas dentro do

diretório /font, com o nome sem a extensão .php; o 2° - estilo: uma string vazia para normal, "B" para negrito, "I" para itálico e "U" para sublinhado; o 3° - unidade de medida: as mesmas para a configuração da página; o 4° - tamanho: uma medida em pontos (pt) para o tamanho da fonte;

SetFontSize() altera o tamanho da fonte especificado anteriormente; SetTextColor() define a cor da fonte, através do código RGB. Possui três parâmetros:

o Um inteiro para a quantidade de vermelho, obrigatório; o Um inteiro para a quantidade de verde, opcional; o Um inteiro para a quantidade de azul, opcional;

SetXY() define a posição do texto na página, através de dois parâmetros: o O valor da coordenada X, na unidade de medida já especificada; o O valor da coordenada Y, na unidade de medida já especificada;

SetX() define apenas a coordenada X da posição do texto;

Page 3: Class Fpdf

SetY() define apenas a coordenada Y da posição do texto.

As coordenadas são definidas com origem no topo da página, no lado esquerdo. Depois de configurarmos o local onde o texto será inserido, e a formatação do mesmo, utilizamos o método Write() para efetuar a escrita. Esse método possui três parâmetros:

1° - a altura do texto em relação a base da linha 2° - a string a ser escrita 3° - se desejamos que a string seja um link, especificamos nesse terceiro parâmetro qual o endereço do

link

Vejamos um código de exemplo:

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo as margens$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros

// configurando o texto$meu_pdf -> SetFont("times", "BI", "cm", 18); // Times New Roman, em negrito e itálico, unidade de medida cm, tamanho 18$meu_pdf -> SetTextColor(0, 0, 255); // azul$meu_pdf -> SetXY(4, 4); // à 4 centímetros da esquerda e do topo

// escrevendo$meu_pdf -> Write(0.5, "Criando PDFs com ");// escrevendo e criando um link$meu_pdf -> Write(0.5, "PHP", "http://www.php.net");?>

Para inserir quebras de linha, basta chamar o método Ln(). Este método possui um parâmetro opcional: a altura da próxima linha. Vamos adicionar algum texto ao nosso documento anterior:

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo as margens$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros

// configurando o texto$meu_pdf -> SetFont("times", "BI", "cm", 18); // Times New Roman, em negrito e itálico, unidade de medida cm, tamanho 18$meu_pdf -> SetTextColor(0, 0, 255); // azul$meu_pdf -> SetXY(4, 4); // a 4 centímetros da esquerda e do topo

// escrevendo$meu_pdf -> Write(0.5, "Criando PDFs com ");// escrevendo e criando um link$meu_pdf -> Write(0.5, "PHP", "http://www.php.net");

Page 4: Class Fpdf

// quebrando a linha, duas vezes$meu_pdf -> Ln();$meu_pdf -> Ln();

// adicionando mais texto$meu_pdf -> Write(0.5, "Não é tão complicado!!");?>

Você deve estar pensando: cadê o PDF? Até este momento, nosso script apenas montava o documento na memória. O objeto não era transformado em um arquivo PDF. Para que a saída seja feita, usamos o método Output(). O exemplo anterior ficaria assim:

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo as margens$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros

// configurando o texto$meu_pdf -> SetFont("times", "BI", "cm", 18); // Times New Roman tamanho 18, em negrito e itálico$meu_pdf -> SetTextColor(0, 0, 255); // azul$meu_pdf -> SetXY(4, 4); // a 4 centímetros da esquerda e do topo

// escrevendo$meu_pdf -> Write(0.5, "Criando PDFs com ");// escrevendo e criando um link$meu_pdf -> Write(0.5, "PHP", "http://www.php.net");

// quebrando a linha, duas vezes$meu_pdf -> Ln();$meu_pdf -> Ln();

// adicionando mais texto$meu_pdf -> Write(0.5, "Não é tão complicado!!");

// gerando a saída$meu_pdf -> Output();?>

Output() é sempre o último método chamado, já que não é possível, por exemplo, modificar a fonte de um documento que já foi enviado para o navegador.

2.4 - Usando células

A classe FPDF oferece um recurso interessante: é possível criar células para agrupar o conteúdo. Ao utilizar células, você possibilita uma maior gama de formatação, como desenhar bordas e preencher o plano de fundo. Para tanto, existem dois métodos:

Cell() cria uma célula. Seus parâmetros são: o 1° - largura da célula. Único parâmetro obrigatório; o 2° - altura da página. Opcional; o 3° - texto a ser inserido na célula. Opcional, como os outros que seguem; o 4° - borda da célula. 1 para todas as bordas, 0 para nenhuma. Pode-se utilizar combinações das

letras L, T, R e B para bordas à esquerda, topo, direita e rodapé, respectivamente;

Page 5: Class Fpdf

o 5° - onde deve ser inserida a quebra de linha: na direita (0), no início da próxima linha (1) ou abaixo da célula (2);

o 6° - alinhamento do texto dentro da célula: L para esquerda, C para o centro e R para a direita; o 7° - preenchimento. 0 para não-preenchido, 1 para preenchido; o 8° - link. Mesmo funcionamento do terceiro parâmetro de Write().

MultiCell() cria diversas células. Parâmetros: o 1° - largura da célula. Único parâmetro obrigatório; o 2° - altura da página. Opcional; o 3° - texto a ser inserido na célula. Opcional, como os outros que seguem; o 4° - borda da célula. 1 para todas as bordas, 0 para nenhuma. Pode-se utilizar combinações das

letras L, T, R e B para bordas à esquerda, topo, direita e rodapé, respectivamente; o 5° - onde deve ser inserida a quebra de linha: na direita (0), no início da próxima linha (1) ou

abaixo da célula (2); o 6° - alinhamento do texto dentro da célula: L para esquerda, C para o centro e R para a direita; o 7° - preenchimento. 0 para não-preenchido, 1 para preenchido.

Após uma chamada à Cell(), o indicador de posição retorna para a posição zero da esquerda, na próxima linha, o que não ocorre com MultiCell().

Vejamos um exemplo:

2.5 - Inserindo imagens e desenhos

Para inserir uma imagem no documento, usamos o método Image(). A lista de parâmetros é a seguinte:

1° - endereço da imagem. Obrigatório; o Imagens JPG em preto e branco, coloridas e no formato CMYK; o Imagens PNG sem camada alfa nem entrelaçamento. São permitidas imagens com cores

indexadas; 2° - a abcissa da posição na qual a imagem será inserida (medida do topo para baixo). Obrigatório; 3° - a ordenada da posição na qual a imagem será inserida (medida da esquerda para a direita).

Obrigatório; 4° - largura da imagem na página. Opcional; 5° - altura da imagem na página. Opcional; 6° - tipo do arquivo: JPG, JPEG ou PNG. Opcional; 7° - link. Insere um link a uma imagem, da mesma forma que o método Write(). Opcional.

Vejamos um exemplo:

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo as margens$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros

// inserindo a imagem$meu_pdf -> Image("php.jpg", 6, 5); // imagem php.jgp a 6 cm da esquerda e 5 do topo

// produzindo a saída$meu_pdf -> Output();?>

Page 6: Class Fpdf

Salve uma imagem no diretório onde se encontra o seu script PHP. Substitua o nome passado como parâmetro para o método pelo nome da sua imagem (ou salve sua imagem com o nome utilizado) e teste o código. Viu como foi fácil?

Criar desenhos também é muito simples. A biblioteca dispõe de recursos para desenhar linhas e retângulos, através dos métodos Line() e Rect(), respectivamente.

O método Line() recebe os seguintes parâmetros:

1° - Abcissa (em relação à esquerda da página) do ponto inicial da linha; 2° - Ordenada (em relação ao topo da página) do ponto inicial da linha; 3° - Abcissa (em relação à esquerda da página) do ponto final da linha; 4° - Ordenada (em relação ao topo da página) do ponto final da linha.

Veja que para que a linha seja desenhada, basta apenas informar onde ela começa e onde termina.

O método Rect() recebe os seguintes parâmetros:

1° - Abcissa onde o canto superior esquerdo do retângulo será posicionado; 2° - Ordenada onde o canto superior esquerdo do retângulo será posicionado; 3° - Largura do retângulo; 4° - Altura do retângulo; 5° - Estilo:

o "D" para desenhar somente bordas; o "F" para somente preencher internamente; o "DF" (ou "FD") para desenhar as bordas e preencher;

O quinto parâmetro é opcional. Por padrão, apenas as bordas são desenhadas. Lembre-se de utilizar a unidade de medida estabelecida lá no início! O exemplo a seguir desenha alguns retângulos e linhas no PDF. Teste o script para ver o resultado.

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo as margens$meu_pdf -> SetMargins(2.5, 2.5); // lembre-se que definimos a unidade de medida como centímetros

// desenhando um retângulo sem preenchimento$meu_pdf -> Rect(3, 3, 15, 1);

// o mesmo retângulo anterior, mas preenchido$meu_pdf -> Rect(3, 6, 15, 1, "F");

// algumas linhas, formando um triângulo$meu_pdf -> Line(3, 8, 15, 8); $meu_pdf -> Line(15, 8, 3, 18);$meu_pdf -> Line(3, 18, 3, 8);

// produzindo a saída$meu_pdf -> Output();?>

É possível também alterar as cores das bordas e do preenchimento. Para tanto, usamos os métodos SetDrawColor() e SetFillColor(), que recebem três parâmetros:

Page 7: Class Fpdf

1° - Quantidade de vermelho da cor, obrigatório; 2° - Quantidade de verde da cor, opcional; 3° - Quantidade de azul da cor, opcional.

Procure tabelas com códigos RGB de cores. Os valores ilustrados nessas tabelas são passados como parâmetros aqui. Veja um exemplo:

<?phprequire_once 'fpdf.php';

// instanciando o objeto$meu_pdf = new FPDF('P', 'cm', 'A4');

// adicionando uma página$meu_pdf -> AddPage('P'); // 'P' para formato retrato

// definindo a cor do preenchimento$meu_pdf -> SetFillColor(0, 0, 255);

// desenhando um retângulo preenchido$meu_pdf -> Rect(3, 3, 4, 7, "F");

// mais algumas definições e desenhos$meu_pdf -> SetFillColor(255, 255, 255);$meu_pdf -> Rect(7, 3, 4, 7, "F");$meu_pdf -> SetFillColor(255, 0, 0);$meu_pdf -> Rect(11, 3, 4, 7, "F");

// duas linhas verdes$meu_pdf -> SetDrawColor(0, 255, 0);$meu_pdf -> Line(3, 15, 15, 15);$meu_pdf -> Line(3, 16, 15, 16);

// produzindo a saída$meu_pdf -> Output();?>

Com os retângulos, desenhamos a bandeira da França.

2.6 - Cabeçalhos e rodapés

Existem dois métodos na classe FPDF que inserem cabeçalho e rodapé em uma página. Eles não podem ser chamados diretamente; são chamados automaticamente quando inserimos uma nova página no documento. Por padrão, eles não possuem implementação, e, portanto, não produzem resultado nas páginas. Para que os cabeçalhos e rodapés sejam criados, você precisa sobrescrever esses dois métodos para que eles façam o que você deseja (inserindo texto personalizado, com estilo personalizado).

O exemplo a seguir cria uma nova classe que estende a classe FPDF e sobrescreve os dois métodos citados. Veja:

<?phprequire 'fpdf.php';

class PDF extends FPDF { function Header() { $this -> Image('cabecalho.jpg', 0, 0); // imagem para o cabeçalho } function Footer() { $this -> SetFont("Arial","B", "cm", 10); // Configuração da fonte do cabeçalho $this -> SetXY(-18, -2); // Posicionando o cursor para inserir o rodapé

Page 8: Class Fpdf

$this -> MultiCell(17, 1, "A PDF Footer :: Pg " . $this->PageNo(), 1); // Rodapé }}?>

Note que as coordenadas passadas são medidas na unidade definida na criação do objeto. Você precisa alterar essa característica de acordo com as suas necessidades. Coordenadas negativas indicam que a medida é feita da extremidade oposta à origem: a partir da direita, na horizontal; a partir do rodapé, na vertical.

2.7 - Outros métodos oferecidos pela classe FPDF

A seguir estão alguns métodos que podem ser úteis na criação de um documento, junto com uma breve descrição do que o método faz.

GetX() - retorna a abcissa atual do cursor GetY() - retorna a ordenada atual do cursor GetStringWidth() - retorna o comprimento de uma string passada como parâmetro, levando em

consideração as configurações da fonte atual, e da unidade de medida ativa. Útil quando precisamos definir tamanhos de células, linhas ou imagens, para adequá-las ao texto.

Link() - cria um link em uma determinada região retangular do documento. Seus parâmetros são: o 1° - abcissa (medida da esquerda para a direita) da região do link; o 2° - ordenada (medida do topo para baixo) da região do link; o 3° - largura da região retangular do link; o 4° - altura da região retangular do link; o 5° - endereço do link.

SetLineWidth() - define a largura da linha de desenho (Line(), lembra?), através de seu único parâmetro Text() - Escreve um texto na posição especificada. Parâmetros:

o 1° - Abcissa do canto superior esquerdo do bloco do texto; o 2° - Ordenada do canto superior esquerdo do bloco do texto; o 3° - O próprio texto.

PageNo() - já visto anteriormente, retorna o número da página atual

Uma referência completa dos métodos pode ser encontrada em http://www.fpdf.org/en/doc/index.php

2.8 - Exemplo de gerador de PDF

O código a seguir gera um arquivo PDF a partir de dados vindos via POST. Leia atentamente os comentários do código, que o explicam completamente:

<?php

// obtendo os dados vindos via POST$titulo = $_POST["titulo"];$texto = $_POST["texto"];$autor = $_POST["autor"];

// requisitando a classe FPDFrequire_once("./fpdf/fpdf.php");

// criando e configurando o objeto FPDF$pdf = new FPDF("P", "cm", "A4");

$pdf -> AddPage("P");$pdf -> SetMargins(2.5, 2.5);$pdf -> SetFont("times", "B", "cm", 12); // tamanho diferenciado para o título$pdf -> SetTextColor(0, 0, 0); // preto$pdf -> SetXY(4, 4);

// escrevendo o título

Page 9: Class Fpdf

$pdf -> Write(0.5, $titulo);

// algumas quebras de linha$pdf -> Ln();$pdf -> Ln();$pdf -> Ln();

// mudando a fonte para escrever o corpo do documento$pdf -> SetFont("times", "", "cm", 12);

// escrevendo o corpo$pdf -> Write(0.5, $texto);

// mais quebras de linha$pdf -> Ln();$pdf -> Ln();

// mudando a fonte para incluir referência ao nome do autor$pdf -> SetFont("times", "I", "cm", 12);

// escrevendo o nome do autor$pdf -> Write(0.5, "Autor: " . $autor);

// criando o PDF$pdf -> Output();

?>

Salve o código anterior como geraPDF.php. O seguinte código HTML (geraPDF.html) monta um pequeno formulário que submete dados para nosso script gerador de PDF. Veja:

<html> <head> <title> Gerador simples de PDF </title> </head> <body> <h1> Preencha os campos abaixo: </h1> <form name="form1" action="geraPDF.php" method="POST"> <input type="text" maxlength="50" size="50" name="titulo" value="Titulo do documento..." /><br /> <textarea name="texto" cols="40" rows="20"> Digite aqui o texto do documento... </textarea><br /> <input type="text" maxlength="50" size="50" name="autor" value="Nome do autor..." /><br /> <input type="submit" value="GERAR!" /> <input type="reset" value="LIMPAR!" /> </form> </body></html>