+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 56 comentários
Prezados,

Boa tarde!

Estou começando a utilizar o FPDF e estou com uma grande dificuldade em fazer as alterações pra que ele aceite os acentos.

Podem me dar algumas dicas?!

No aguardo, desde já agradeço.
11/08/2016 12:12pm (~3 meses atrás)

Estou precisando gerar vários arquivos pdf de uma vez só. Gerar um único arquivo pdf já consegui, mas enviar mais de 1 arquivo de uma só vez e salvar em uma pasta não está dando certo... O programa só gera e salva o primeiro.
Alguém pode me ajudar?

Grata!

Basicamente estou testando assim:

$a=1;

while($a<10) {

$pdf = new PDF();
$pdf->Open();
$pdf->AddPage();

$pdf->SetXY(50, $pdf->GetY()+17);
$pdf->Cell(60, 20, "TESTE",0);

$pdf->SetXY(12, $pdf->GetY()+20);

$pdf->Cell(37, 10, "Teste: ",0,0,'R');
$pdf->Cell(85, 10, $a.'<br>',0,0,'L');

$pdf->Output($a.'_2014.pdf','F');
$a++;
}
13/10/2014 9:06am (~2 anos atrás)

unknow disse:
P.s: Solução encontrada e já implementada.

Segue para consulta:

http://www.fpdf.de/downloads/addons/57/

Grato pela atenção!
11/12/2010 9:50pm (~6 anos atrás)

unknow disse:
Oi boa noite precisava urgente saber em como reiniciar a numeração da pagina.

Ex.:
1/4
2/4
3/4
4/4
1/3
2/3
3/3

Tudo em um mesmo arquivo.

Eu consigo juntar com o buffer, mas não consigo reiniciar a numeração da pagina, ao juntar com o buffer de cada geração do pdf ele coloca o total das paginas.

AGRADECO MUITO A AJUDA!!!
FLW...
11/12/2010 8:10pm (~6 anos atrás)

Olá poderiam me ajudar ...

Estou desenvolvendo um aplicativo que quando clico no link php, deve gerar um relatório com os dados que encontram-se na página com esse link. Quando clico no link qual classe deve ser chamada para gerar o relatorio php?
04/11/2010 10:29am (~6 anos atrás)

Malcoln disse:
Consegui resolver. Vi um comentário na net dizendo que não poderia haver espaços em branco após a tag PHP. E o erro acusado era no arquivo de conexão. Após a tag PHP não havia nenhum código pois era o fim da programação. Mas havia espaços em branco invisíveis. Coloquei o cursor após a tag PHP e fiquei com o delete pressionado. Isso resolveu o problema.
28/10/2010 9:31am (~6 anos atrás)

Malcon, você deve estar dando alguma saida html.

retire todas as tags, todos os echos, prints e qq caractere que saia para o navegador.
24/09/2010 5:51pm (~6 anos atrás)

Malcoln disse:
Fiz como abaixo mas dá erro:

FPDF error: Some data has already been output, can't send PDF file

<?php
ob_start();
define('FPDF_FONTPATH', 'font/');
require('C:\xampp\htdocs\SCCAC2\fpdf16\fpdf.php');
include "valida_cookie.php";
include "conecta_mysql.inc";
// busca os dados no banco de dados
$busca = mysql_query("SELECT * FROM TBCIDADE");
$pdf = new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 10);
$pdf->Cell(40, 5, 'Código da Cidade');
$pdf->SetX(35);
$pdf->Cell(60, 5, 'Cidade');

while ($resultado = mysql_fetch_array($busca))
{
$pdf->ln();
$pdf->Cell(40, 5, $resultado['cdcidade']);
$pdf->SetX(35);
$pdf->Cell(60, 5, $resultado['nmcidade']);
$pdf->SetX(50);
}
$pdf->Output();
?>
24/09/2010 3:54pm (~6 anos atrás)

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 (~7 anos atrás)

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

=)
25/10/2008 2:12pm (~8 anos atrás)

Novo Comentário:

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