Autor Tópico: Fazendo um relatório FPDF com Cabeçalho e Rodapé  (Lida 12901 vezes)

haroldo_freire

  • Novato
  • *
  • Mensagens: 15
    • Email
Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Online: Abril 26, 2013, 10:40:02 pm »
Boa galera rodei atraz de uma maneira para inserir o cabeçalho e o rodapé do fpdf na aplicação blank, como eu não consegui, pois tinha que extender a classe FPDF, e o scriptcase não permite, então fiz tudo na mão. Em caso de melhorias no código, dúvidas, etc... deixa o camentário aê.

Código: [Selecionar]
/*relatorio de encomendas envidas pelo os correios*/

//aqui eu inicio o fpdf
sc_include_lib("fpdf");
$pdf = new fpdf();
$pdf->SetAutoPageBreak(0);

//Função para limitar a quantidade de carater na celula do fdpf
function limitar($string, $tamanho, $encode = 'UTF-8') {
$string = mb_substr($string, 0, $tamanho, $encode);
return $string;
}//fim da função "limitar"

//query para pegar os valores da tabela e somar
$queryvalor = mysql_query("SELECT SUM(valor)as soma
FROM
encomendas
WHERE
data
BETWEEN
'".[data_inicial_digitada]."'
AND
'".[data_final_digitada]."'
");
/*Somando o campo "valor" e convertendo para moeda R$*/
$cont = mysql_fetch_array($queryvalor);
$valor_total = number_format($cont["soma"],2,',','.');


/*lookup na tabela "encomendas" pesquisando por um intervalo de datas,
onde as datas estão vindo de uma outra aplicação de controle*/
sc_lookup(meus_dados,"SELECT
solicitante,
remetente,
destinatario,
rastreamento,
data,
valor,
observacao
FROM
encomendas
WHERE
data
BETWEEN
'".[data_inicial_digitada]."'
AND
'".[data_final_digitada]."'
ORDER BY
data
");//fim do sc_lookup

//aqui eu converto as datas para poder exibir no relatório
$data_inicial = sc_date_conv([data_inicial_digitada],"aaaammdd","dd/mm/aaaa");
$data_final = sc_date_conv([data_final_digitada],"aaaammdd","dd/mm/aaaa");

//variável que me diz a quantidade de linhas a ser impressa
$linhasPpg = 26;
//variável que me diz quando deve ser impresso o cabeçalho e rodapé
$linhasCbl = 999;
//variável para exibir o número da página
$PageNo = 0;
//variável que pega o numero de registro que tenho no banco
$max = sizeof($meus_dados);


/*aqui inicia o loop que vai imprimir todo o meu relatório*/
for($i= 0; $i < $max;$i++)
{
/*aqui onde eu pego os dados do lookup,
colocao em variáveis e limito o tamanho de caracteres*/
$myhr_solicitante       = limitar({meus_dados[$i][0]},22);
$myhr_remetente        = limitar({meus_dados[$i][1]},22);
$myhr_destinatario      = limitar({meus_dados[$i][2]},27);
$myhr_rastreamento = limitar({meus_dados[$i][3]},17);
$myhr_data      = sc_date_conv({meus_dados[$i][4]},"aaaa-mm-dd","dd/mm/aaaa");
$myhr_valor      = number_format({meus_dados[$i][5]},2,',','.');
$myhr_observacao  = limitar({meus_dados[$i][6]},29);

/*aqui estou somando a variável, que vai me dizer
quando eu devo imprimir o cabeçalho e rodapé*/
$linhasCbl = $linhasCbl + 1;

/*------------------------- cabeçalho e rodapé----------------------------------*/
/*------------------------- cabeçalho e rodapé----------------------------------*/

/*condição para imprimir cabeçalho e rodapé,
se a variável para imprimir cabeçalho for maior que
a variavel com a quantidade de linhas a imprimir,
então imprima*/
if ($linhasCbl > $linhasPpg) {

//aqui e pego o número da página, toda a vez que eu iimprimir o cabeçalho
$PageNo = $PageNo + 1;

//adiciono uma pagina para meu relatório
$pdf->AddPage('L','A4');

//carrego as imagens do meu relatório
$pdf->Image('../_lib/img/sys__NM__bg_menu.jpg', 8, 25, 280, 6);
$pdf->Image('../_lib/img/sys__NM__topo-marca.png', 8, 5, 60, 15);

//defino o título do cabeçalho
$pdf->SetFont('Arial', '', 20);
$pdf->SetXY(8,5);
$pdf->Cell(280,10,'Relatório de encomendas Enviadas: ',0,1,'C');
$pdf->Ln(2);

//defino local para exibir das datas do intervalo pesquisado
$pdf->SetFont('Arial','',10 );
$pdf->SetX(220);
$pdf->Cell(16,6,'Período: ',0,0,'L');
$pdf->Cell(20,6,$data_inicial,1,0,'L');
$pdf->Cell(9,6,' até ',0,0,'L');
$pdf->Cell(20,6,$data_final,1,0,'L');

/*--------------- imprimo o rodapé--------------------*/
/*--------------- imprimo o rodapé--------------------*/
$pdf->SetTextColor(0);
$pdf->Setxy(145,200);
$pdf->Cell(45,6,'Página '.$PageNo,0,0,'L');
/*--------------- fim do rodapé -------------------*/
/*--------------- fim do radapé -------------------*/



/*-------- imprimo o cabeçalho da tabela -------*/
$pdf->SetTextColor(255);
$pdf->SetFont('Arial', 'B', 11);

$pdf->Setxy(8,25);
$pdf->Cell(45,6,'Solicitante',1,0,'L');
$pdf->Cell(45,6,'Remetente',1,0,'L');
$pdf->Cell(55,6,'Destinatario',1,0,'L');
$pdf->Cell(35,6,'Rastreamento',1,0,'L');
$pdf->Cell(25,6,'Valor',1,0,'L');
$pdf->Cell(55,6,'Observação',1,0,'L');
$pdf->Cell(20,6,'Data',1,1,'L');

/*aqui eu zero a variável do cabeçalho para não iimprimir,
enquanto não atingir a quantidade maxima de linhas por pagina*/
$linhasCbl = 0 ;

}//aqui eu fecho o loop do cabeçalho e rodapé

/*aqui eu imprimo as linhas da minha tabela*/
$pdf->SetTextColor(0);
$pdf->SetFont('Arial', '', 9);
$pdf->Setx(8);
$pdf->Cell(45,6,$myhr_solicitante,1,0,'L');
$pdf->Cell(45,6,$myhr_remetente,1,0,'L');
$pdf->Cell(55,6,$myhr_destinatario,1,0,'L');
$pdf->Cell(35,6,$myhr_rastreamento,1,0,'L');
$pdf->Cell(5,6,'R$','LTB',0,'L');
$pdf->Cell(20,6,$myhr_valor,'TRB',0,'R');
$pdf->Cell(55,6,$myhr_observacao,1,0,'L');
$pdf->Cell(20,6,$myhr_data,1,1,'L');

}//aqui eu fecho a impressão do relatório


/*e por último, imprimo um resumo de quantos registos foram impressos, e
valor total das encomendas enviadas*/
$pdf->SetFont('Arial', 'B', 11);
$pdf->Cell(0,15,"",0,1);
$pdf->SetX(8);
$pdf->Cell(55,6,'Quantidade de Encomendas: ',0,0,'L');
$pdf->Cell(20,6,$max,0,1,'L');
$pdf->Cell(0,5,"",0,1);
$pdf->SetX(8);
$pdf->Cell(25,6,'Valor Total: ',0,0,'L');
$pdf->Cell(25,6,'R$'.$valor_total,0,0,'L');

$pdf->Output();

COLOQUEI A IMAGEM DE UM EXEMPLO DO RELATÓRIO IMPRESSO

PS. CÓDIGO ESTÁ TODO COMENTADO...

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #1 Online: Abril 27, 2013, 08:46:51 am »
Parabéns pelo código, esta muito bem feito.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #2 Online: Abril 27, 2013, 10:06:30 am »
Em falar nisso alguém conhece uma ferramenta que gera visualmente os códigos para fpdf?
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #3 Online: Abril 27, 2013, 10:23:55 am »
Gere visualmente ? Como assim ?
F. A.
Analista de Sistemas

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #4 Online: Abril 27, 2013, 11:52:28 am »
Tipo a FastReport para Delphi/xHarbour?
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

Jailton

  • Expert
  • *****
  • Mensagens: 2030
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #5 Online: Abril 27, 2013, 03:56:42 pm »
Tipo a FastReport para Delphi/xHarbour?

Isso só que ai ele gera o código já em php usando o fpdf ai é só colar no blank, hehe
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #6 Online: Abril 27, 2013, 04:17:35 pm »
HAHAHA...  Assim é bom de mais! Na verdade o próprio SC deveria ter o PDFReport mais apurado. Mas quem sabe na versão 8..9... n ? Esperar, a tendência sempre é evoluir!
F. A.
Analista de Sistemas

alessondelmiro

  • Novato
  • *
  • Mensagens: 5
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #7 Online: Setembro 25, 2013, 01:25:05 pm »
Pessoal, gostaria de saber se tem como numerar as páginas em um relatório de FPDF automaticamente. Eu estou fazendo um relatório que a quebra de páginas é automática, mas eu não consigo numerar todas as páginas, só quando eu chamo o método Footer ().

haroldo_freire

  • Novato
  • *
  • Mensagens: 15
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #8 Online: Setembro 25, 2013, 01:34:16 pm »
Galera, descobri a maneira de inserir o cabecalho e rodape com numero de paginas e tudo, do jeito que o site do fpdf.org ensina...
1-Voce escreve todo o codigo do cabecalho e rodape do seu relatorio.
2- Salva em um arquivo exp: dentro da pasta _lib da sua aplicacao
3-depois chama ele com include(../_lib/arquivo_criado.php);

é isso ai, deu certinho...

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #9 Online: Setembro 25, 2013, 01:41:03 pm »
$pdf->PageNo();
F. A.
Analista de Sistemas

haroldo_freire

  • Novato
  • *
  • Mensagens: 15
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #10 Online: Setembro 27, 2013, 07:36:29 pm »
Boa galera, fiz um video onde explico como eu faço pra colocar o cabeçalho e rodapé automatico no relatorio fpdf na aplicação blank usando o exemplo do site fpdf.org.

http://youtu.be/PgiQpIYQyoQ

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #11 Online: Setembro 27, 2013, 09:55:40 pm »
Não é por nada não mais, na versão que uso 7.1.008 consigo estender uma classe FPDF e nisso utilizo o header da mesma.

Más mesmo assim valeu pelo compartilhamento.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

haroldo_freire

  • Novato
  • *
  • Mensagens: 15
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #12 Online: Setembro 28, 2013, 12:39:07 am »
Caramba Almeida, mais no video eu mostro que da o erro, realmente não consigo extender a classe direto, e a versão que eu estou usando é essa também. 7.1.008. mais vou dar uma olhada melhor. Valeu pela dica.

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #13 Online: Setembro 28, 2013, 01:51:41 am »
Faz assim:

Crie uma biblioteca, com o nome desejado, vou usar como EXPDF.

Código da biblioteca
Código: [Selecionar]
require_once($this->path_third . "/fpdf/fpdf.php");
define("FPDF_FONTPATH", "font/");
class EXPDF extends FPDF
{
  function Header()
  {

  }

  function Footer()
  {

  }

}

Agora na blank vá em bibliotecas e marque a sua biblioteca.
No onExecute da blank é so instanciar a classe:
Código: [Selecionar]
$p = new EXPDF();

PS: Acho que seu exemplo não está funcionado pois está tentando criar e instanciar um classe dentro de outra. Utilizando a bibliotecas vai estar apenas instanciando.

Good Luck

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

jorgepopel

  • Expert
  • *****
  • Mensagens: 568
    • iCentro Tecnologia e Sistemas
    • Email
Re:Fazendo um relatório FPDF com Cabeçalho e Rodapé
« Responder #14 Online: Dezembro 17, 2013, 09:30:43 pm »
Depois de muito penar, consegui fazer relatórios como esse demonstrado pelo Haroldo_freire, utilizando o reportpdf do SC.

Como vantagem em fazer dessa forma eu vejo a questão da conexão, do filtro e o controle do cabeçalho e rodapé.
Só temos que nos preocuparmos com o sql e, eventualmente, as quebras/totalizações.

Depois de "pegar o jeito", é moleza.

O Endrigo tb tem conseguido uns relatórios bem bacanas, a propósito, tomei como base um arquivo dele.
Um agradecimento público ao Endrigo. :)