Gerando documentos PDF com a classe FPDF
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:
Agora vamos analisar cada linha:
Aqui você define onde está o diretório font/, criado na instalação do FPDF. Esta linha é obrigatória.
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.
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.
Inicia um novo documento PDF.
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;
Aqui a Fonte é definida como Arial, tamanho 12 e em negrito. A sintaxe da função SetFont() é:
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.
Imprime algum texto no documento. Neste caso, "Olá Mundo!!". A sintaxe da função Write() é:
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.
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.
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.
Páginas:
1
2
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.
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
(~8 anos 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++;
}
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
(~10 anos atrás)
P.s: Solução encontrada e já implementada.
Segue para consulta:
http://www.fpdf.de/downloads/addons/57/
Grato pela atenção!
Segue para consulta:
http://www.fpdf.de/downloads/addons/57/
Grato pela atenção!
11/12/2010 9:50pm
(~14 anos atrás)
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...
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
(~14 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?
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
(~14 anos atrás)
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
(~14 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.
retire todas as tags, todos os echos, prints e qq caractere que saia para o navegador.
24/09/2010 5:51pm
(~14 anos atrás)
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();
?>
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
(~14 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.
Parabéns mesmo.
14/07/2009 10:06pm
(~15 anos atrás)
rel_cad_teste.php
<?php
include 'fpdf/fpdf.php';
include_once("conexao.php");
include 'cad_pdf_cabecalho.php';
$medicamentos = mysql_query("SELECT * FROM saude.medicamento ORDER BY med_descricao");
$pdf = new FPDF('L');
$pdf->AddPage();
$pdf->AliasNbPages();
$pdf->SetFont('Arial','',8);
Cabecalho();
//inserção do enunciado dos dados
Enunciado();
//foreach($linhas as $medicamento) {
while($medicamento = mysql_fetch_array($medicamentos)) {
$pdf->SetFont("Arial","",8);
$pdf->Cell(105,7,utf8_decode($medicamento['med_descricao']),1,0,"L");
$pdf->Cell(25,7,$medicamento['med_referencia'],1,0,"C");
$pdf->Cell(25,7,utf8_decode($medicamento['med_unidade']),1,0,"C");
$pdf->Cell(10,7,$medicamento['med_qtdetotal'],1,0,"C");
$pdf->Cell(80,7,utf8_decode($medicamento['med_observacao']),1,0,"L");
$pdf->Cell(30,7,date('d/m/Y - H:i:s',strtotime($medicamento['med_datacad'])),1,0,"C");
$pdf->Ln();
}
rodape();
$pdf->Output();
?>
cad_pdf_functions
<?php
//montagem do cabeçalho
function Cabecalho()
{
global $pdf;
$pdf -> SetY(0); // configuração da distância da parte superior da página
$pdf -> Image('cabecalho_antigo_oficial_paisagem.jpg', 40, 1); // importar a imagem do cabeçalho
$pdf -> SetXY(10, 45);
$pdf->SetAutoPageBreak(auto, 0);
$pdf->y0=$pdf->GetY();
}
function Enunciado()
{
global $pdf;
$pdf->SetFont('Arial','B',10); //tipo de fonte e tamanho da letra do enunciado
$pdf->Cell(280,5,utf8_decode('Relatório de Medicamentos - Ordem Alfabética'),0,0,"C"); //Título do Enunciado
$pdf->Ln(); // quebra de linha
$pdf->SetFont("Arial","B",8); //tipo de fonte e tamanho da letra
//títulos fixos do enunciado
$pdf->Cell(105,7,"Medicamento",1,0,"C");
$pdf->Cell(25,7,utf8_decode("Código SAM"),1,0,"C");
$pdf->Cell(25,7,"Unidade",1,0,"C");
$pdf->Cell(10,7,"Total",1,0,"C");
$pdf->Cell(80,7,utf8_decode("Observação"),1,0,"C");
$pdf->Cell(30,7,"Data de Cadastro",1,0,"C");
$pdf->Ln(); //quebra de linha
}
// montagem do rodapé
function Rodape()
{
global $pdf;
$pdf->SetY(-25); // configuração da distancia da parte inferior da página
$pdf->SetFont('Arial','',8); // tipo de tamanho da fonte
$pdf->Cell(0,4,utf8_decode("Rodovia Comandante João Ribeiro de Barros, Km 465, Marília/SP - CEP: 17.525.-320 - cx.p 105 - Fone/Fax: (14) 3425-2888 - E-mail: diretoriageral@pmarilia.sap.sp.gov.br"),0,0,'C'); //texto do rodapé
$pdf->ln(); //quebra de linha
$pdf->Cell(0,10,utf8_decode('Página ' .$pdf->PageNo().' de {nb}'),0,0,'C'); //Imprime o número da página
}
?>