+3

Gerando documentos PDF com a classe FPDF

criado por Nivaldo Pereira de Arruda Neto em 10/08/2006 7:16pm
O FPDF é uma classe para PHP de grande utilidade no processo de criação de relatórios em formato PDF, utilizando funções simples e poderosas. O FPDF é um Software Livre (e gratuito), o que significa que você poderá utilizá-lo livremente para uso pessoal ou comercial, além de poder modificá-lo e estudar seu código-fonte, ao contrário da PDFlib, que exige o pagamento de licenças para uso comercial.

O FPDF possui suporte às principais funções para geração de relatórios, como por exemplo:

- Formatação de cabeçalho (Header) e rodapé (Footer);
- Quebra de página automática;
- Quebra de linha e justificação de texto automática;
- Suporte a imagens (JPEG e PNG);
- Suporte a fontes TrueType e Type1;

Instalando o FPDF

Antes de mais nada, acesse o endereço http://www.fpdf.org e faça o download da última versão do FPDF. Depois, descompacte o arquivo (.zip ou .tgz) no diretório em que ficará hospedado seu website.

Primeiros passos

Crie um arquivo com o nome de modelo.php, por exemplo, e adicione as seguintes linhas:

<?php 
define('FPDF_FONTPATH', 'font/');
require('fpdfxxx/fpdf.php'); // onde xxx é a versão da FPDF
$pdf = new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 12);
$pdf->Write(4, 'Olá Mundo!!');
$pdf->Output();
?>

Agora vamos analisar cada linha:

define('FPDF_FONTPATH','font/');

Aqui você define onde está o diretório font/, criado na instalação do FPDF. Esta linha é obrigatória.

require('sub_diretorio/fpdf.php');

Nesta linha você informa onde está o arquivo fpdf.php. É neste arquivo que estão todas as funções utilizadas neste artigo. Esta linha também é obrigatória.

$pdf = new FPDF();

Cria o objeto FPDF. Os valores default para página são: tamanho A4 e no modo Retrato, com as medidas em milímetros (mm). A sintaxe da função FPDF() é:

FPDF([String Orientação [,String Unidade [,mixed formato]]]);
O parâmetro Orientação pode ser preenchido com:

- P: Portrait (Retrato) ou
- L: Landscape (Paisagem).

Em Unidade podemos informar os valores:

- pt: para pontos;
- mm: para milímetros;
- cm: para centímetros ou
- in: para polegadas.

E em Formato:

- A3;
- A4;
- A5;
- Letter;
- Legal.

$pdf->Open();

Inicia um novo documento PDF.

$pdf->AddPage();

Adiciona uma página ao documento, com o cursor a 1cm de distância da margem esquerda e 1cm de distância da margem superior;

$pdf->SetFont('Arial','B',12);

Aqui a Fonte é definida como Arial, tamanho 12 e em negrito. A sintaxe da função SetFont() é:

SetFont(string família [,string Estilo [,float tamanho]]);

Onde a família pode ser:

- Courier;
- Helvetica ou Arial;
- Times;
- Symbol ou;
- ZapfDingbats.

Estilo pode receber os valores:

- Vazio : Normal (sem formatação);
- B: Negrito;
- I: Itálico ou
- U: Sublinhado.

$pdf->Write(4,'Olá Mundo!!');

Imprime algum texto no documento. Neste caso, "Olá Mundo!!". A sintaxe da função Write() é:

Write(float altura_da_linha, string texto [, mixed link]);

O parâmetro link deve receber uma URL ou um identificador retornado pela função AddLink(). Não veremos essa função neste artigo, pois o seu propósito é criar relatórios dinâmicos para impressão ou armazenagem.

$pdf->Output();

Cria o arquivo PDF. Se o navegador tiver o plugin Adobe Acrobat Reader instalado, o documento será aberto pelo próprio navegador. Caso contrário, ele pedirá para fazer o download do PDF gerado.

Comentários:

Mostrando 1 - 10 de 48 comentários
Muito bom mesmo. Há tempos que procurava algo que explicasse de forma clara e objetiva a geração de PDF's utilizando a linguagem de programação PHP.

Parabéns mesmo.
14/07/2009 10:06pm (~1 ano atrás)

Paulo Vitor disse:
muito bom .... fiquei muito tempo procurando algo assim...
ajudou muito..

=)
25/10/2008 2:12pm (~1 ano atrás)

Ja conseguiu isso que vc precisa? qq coisa me da um toke!
24/05/2007 11:54am (~3 anos atrás)

Obrigado =)

fico feliz que tenha conseguido =)
24/05/2007 11:51am (~3 anos atrás)

Olá!!!Depois de muito tempo finalmente consegui gerar o pdf completo com textos, imagens e com os dados do bd.

Muito bom...Agora, que estou entendendo um pouco melhor, estou adorando.

Parabéns para você e para mim também(rsrsrs).
23/05/2007 5:08am (~3 anos atrás)

Parabéns pelo artigo! Está claro e objetivo!

Preciso adaptar este script a minha necessidade que é colocar cabeçalho, rodapé e nr em todas as páginas, além de que as linhas devem ser alternadas com a cor branca e cinza, por exemplo.
Ufa!...
Podem me dar mais alguma orientação.
Obrigado.
10/05/2007 10:46am (~3 anos atrás)

ola carol, me desculpe a demora para responder.

Seguinte, acredito qeu esse seu problema esteja na sua busca SQl, pois o PDF em si nao interfere em nada das variaveis vindas do banco, tenta colocar sua busca em algum programa que execute querys (phpmyadmin, sqlyog por exemplo) e veja se retorna alguma coisa.

qq coisa estou por aqui. Abraços
09/05/2007 6:09am (~3 anos atrás)

Olá!!!

Estou com problemas.

Criei o banco de dados, inseri alguns registros e segui o exemplo que você deu.

Bem, gera o pdf somente com os títulos e não está aparecendo as informações do banco de dados, não ocorre nenhuma mensagem com erro, o que pode ser?

Agradeço sua atenção!!!
07/05/2007 10:50am (~3 anos atrás)

Olá JN,

Acredito que isso tenha mais ah ver com o seu SQL ou com lógica de progamação em si do que com o PDF. Porque o PDF você só vai moldar as páginas, mas os dados você tem que pegar do banco de acordo com suas buscas/condições.
01/02/2007 5:42am (~3 anos atrás)

Muito bom seu exemplo. Mas como fazer com quebras? Por ex: Em uma rêde de lojas, com dezenas de vendedores, pegar loja 01 e primeiro vendedor e imprimir as vendas deste do mes de janeiro e totalizar, em seguida fevereiro e totalizar ... assim até dezembro ... depois partir para o segundo vendedor e até o ultimo desta loja. Após listar de todos da loja 01, partir para loja 02 e sim por diante.
Agradeceria muitissimo se desse um exemplo, pois estou migrando de outra linguagem onde desenvolvo relatorios com qualquer nivel de complexidade e em PHP só tenho encontrado exemplos simples.
Agradeço pela ajuda.
01/02/2007 5:08am (~3 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)