+10

Criando relatórios no formato PDF

criado por Cléver Anjos em 06/07/2002 1:58pm
Um grande recurso que esta classe possui é o método:
SetAutoPageBreak(boolean auto [, double margin])

Ele permite ajustar a classe (na verdade é a opção padrão) para fazer quebra de páginas automática. Sabe aquele problema de ter que contar quantas linhas cabem na folha de papel na hora de imprimir e imprimir o rodapé, dar o comando para nova página, imprimir o cabeçalho e incrementar o número de páginas? Pois é, não precisa se preocupar com isso...

Outro recurso que ajuda muito é que podermos sobrescrever os métodos Header() e Footer() para colocarmos o que quisermos nele.

Abaixo segue um exemplo de uma classe baseada na FPDF que eu fiz para geração de relatórios, nela eu adicionei o logo da empresa, o nome do relatório, imprimindo "Página X/Total", etc.

<?php
#
#   Grave esse script com o nome de pdf.php
#
require_once ("fpdf.php");
class PDF extends FPDF {
    var $nome;          // nome do relatorio
    var $cabecalho;     // cabecalho para as colunas

    function PDF($or = 'P') { // Construtor: Chama a classe FPDF
        $this->FPDF($or);
    }

    function SetCabecalho($cab) { // define o cabecalho
        $this->cabecalho = $cab;
    }

    function SetName($nomerel) { // nomeia o relatorio
        $this->nome = $nomerel;
    }
    function Header() {
        $this->AliasNbPages(); // Define o numero total de paginas para a macro {nb}
        $this->Image('logo.jpg', 5, 5, 70); // importa uma imagem
        $this->SetFont('Arial', 'B', 12);  
        $this->SetX(80);
        $this->Cell($this->GetStringWidth($this->nome), 10, $this->nome);
        $this->SetFont('Arial', '', 10);
        $this->SetX(-30);
        $this->Cell(30, 10, "Página: ".$this->PageNo()."/{nb}", 0, 1); // imprime página X/Total de Páginas
        $this->SetX(-10);
        $this->line(10, 18, $this->GetX(), 18); // Desenha uma linha
        if ($this->cabecalho) { // Se tem o cabecalho, imprime
            $this->SetFont('Arial', '', 10);
            $this->SetX(10);
            $this->Cell($this->GetStringWidth($this->cabecalho), 5, $this->cabecalho, 0, 1);
        }
        $this->SetXY(10, 25);
    }

    function Footer() { // Rodapé : imprime a hora de impressao e Copyright
        $this->SetXY(-10, -5);
        $this->line(10, $this->GetY()-2, $this->GetX(), $this->GetY()-2);
        $this->SetX(0);
        $this->SetFont('Courier', 'BI', 8);
        $data = strftime("%d/%m/%Y às %T");
        $this->Cell(100, 6, "(c)CMA - Impresso : ".$data, 0, 0, 'R');
    }
}
?>

Comentários:

Mostrando 1 - 10 de 93 comentários
Alexandre disse:
Ola, parabens pelo post. Mas como faço para quando gerar o relatório a pessoa possa fazer o download? outra coisa quando tento colocar uma imagem da o seguinte erro:
FPDF error: Alpha channel not supported: C:/xampp/htdocs/imaster/110/linha.png

Help-me please.

Alexandre P. Menezes
15/03/2010 12:14pm (~14 anos atrás)

José Walter disse:
Como crio um relatório dinâmico... onde o arquivo que gera o FPDF receba uma variável de um form pelo método POST ou GET e faz a consulta no Banco de dados...? Atualmente eu consigo gerar um relatório com o FPDF, mas a condição da consulta é um valor fixo, predeterminado... EX.: a consulta é SELECT * FROM ALUNOS WHERE ALUNOS = "MARIA"... gostaria de usar WHERE ALUNOS = "$nome"... onde $nome é uma variável recebida pelo método POST de um formulário... Grato!
23/04/2009 12:36pm (~15 anos atrás)

Welton Alves disse:
Estou com problemas de acentuação...

Faço uma pesquisa no BD e quando imprimo os dados em pdf, no lugar das letras acentuadas aparecem caracteres estranhos...
Estou usando SQL SERVER

Alguém tem alguma dica????
09/08/2006 5:59pm (~18 anos atrás)

Minoria,
Eu tinha o mesmo problema e resolvi editando o arquivo .php
e retirei o caracter enter e espaços após o ultimo comando "?>"
01/06/2006 7:42am (~18 anos atrás)


Alguem poderia me ajudar? Não sei como resolver este erro.

Warning: Cannot modify header information - headers already sent by (output started at /srv/www/htdocs/plancap/consulta.php:3) in /srv/www/htdocs/plancap/fpdf/fpdf.php on line 1022
FPDF error: Some data has already been output to browser, can't send PDF file
19/05/2006 11:11am (~18 anos atrás)

Olá pessoal,
Gostaria de saber como faço para inserir uma imagem gerada com a JpGraph num pdf gerado com a pdflib.
<?php

$graph = new Graph(...);

// Code to create the graph
// .........................
// .........................

// Put the image in a PDF page
$im = $graph->Stroke(_IMG_HANDLER);

$pdf = pdf_new();
pdf_open_file($pdf, "");

// Convert the GD image to somehing the
// PDFlibrary knows how to handle
$pimg = pdf_open_memory_image($pdf, $im);

pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "Page 1");
pdf_place_image($pdf, $pimg, 0, 500, 1);
pdf_close_image($pdf, $pimg);
pdf_end_page($pdf);
pdf_close($pdf);

$buf = pdf_get_buffer($pdf);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");

echo $buf;

pdf_delete($pdf);

?>

Está acontecendo o seguinte erro:
Fatal error: Call to undefined function: pdf_open_memory_image()

Estou usando php 4.3.10
JpGraph v1.20.2
PDFlib GmbH 6.0.p1

O está acontecendo?
10/05/2006 1:50pm (~18 anos atrás)

Ola!
Tenho um sistema em php, adorei seu artigo auterei os meus relatorios para pdf.
fiz todos os seu passos,mas nao aparece nada no meu browser, nem com o adobe aberto simplimente a tela fica em branco. Tive a ideia de instalar o dabe mais recente em algumas máquinas e fazer aceso ao meu sistema. com o reader 5.0 nada aparece, com o 6.0 nada aparece só funcionou no 7.0, porem não posso trabalahr com ele pois meu cliente não tem maquina para isso preciso q funcione no 5.0 o que pode estar errado?
10/04/2006 11:36am (~18 anos atrás)

mt bom artigo, parabens, consegui gerar alguns relatorios em pdf estudando seu artigo.

a minha dúvida é a seguinte: qual a sintaxe para colocar negrito, italico, sublinhado no meio de uma multicell, pegando apenas parte dela para formatar.
por exemlo: o negrito do html


valeu!
09/03/2006 4:52am (~18 anos atrás)

Rogger Lima disse:
Ola Clever, cara, estou com um probleminha, muitas vezes o conteudo das celulas "estoura" as margens e ele nao quebra a linha, existe alguma configuração para ser feita pra sanar esse problema ou alguma sijestao de como resolver isso??
obrigado!!!
obs: excelente tutorial!!!!
18/01/2006 5:10am (~19 anos atrás)

Ae Clever,
somente para comentar... Seu tutorial ajudou e está ajudando e muito a criação de relatórios em PDF. Tendo como ponto de partida seu tutorial, já brinquei e muito com a geração de PDF´s.

Excelente tutorial.
Valeu.
03/11/2005 7:15am (~19 anos atrás)

Novo Comentário:

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