Fazendo um relatório FPDF com Cabeçalho e Rodapé

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ê.

[code]/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();[/code]

COLOQUEI A IMAGEM DE UM EXEMPLO DO RELATÓRIO IMPRESSO

PS. CÓDIGO ESTÁ TODO COMENTADO…


EXEMPLO RELATÓRIO.jpg

Parabéns pelo código, esta muito bem feito.

Em falar nisso alguém conhece uma ferramenta que gera visualmente os códigos para fpdf?

Gere visualmente ? Como assim ?

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

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!

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 ().

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…

$pdf->PageNo();

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

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.

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.

Faz assim:

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

Código da biblioteca

[code]
require_once($this->path_third . “/fpdf/fpdf.php”);
define(“FPDF_FONTPATH”, “font/”);
class EXPDF extends FPDF
{
function Header()
{

}

function Footer()
{

}

}[/code]

Agora na blank vá em bibliotecas e marque a sua biblioteca.
No onExecute da blank é so instanciar a classe:

$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

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. :slight_smile:

Jorge, faço os meus relatórios utilizando um Controle, no evento onValidate instancio a classe FPDF, crio um arquivo PDF no diretório raiz da APP e chamo-o em uma window.open(), função do javascript para abrir uma janela popup, nisso tenho os recursos do Controle para fazer o filtro e a vantagem de usar a FPDF pura e fazer tudo que desejo, até o momento. Não estou dizendo que meu método é melhor que o seu, apenas fazendo referencia a seu comentário de poder usar os filtros da report PDF.

Abraço.

Almeida, fica frio. hehehe

O bom é sabermos que temos diversas alternativas.
Eu, por exemplo, vivia reclamando do reportpdf. Hoje não reclamo mais. hehehe

De “grave” acho q agora é só o calendário. Mas tem colegas do fórum ajudando nisso.

Quando digo: só o calendário, não quero dizer que todos os outros problemas sumiram, apenas que as maiores dificuldades eram os relatórios e o uso do calendário. Os outros problemas são pontuais e não quero iniciar, aqui, uma discussão a respeito.

Abraços.

Jorge vc tem algum tutorial do reportpdf, to quebrando a cabeça pra caramba. Vou testar outras alternativas como a do Almeida e do Haroldo.

Valeu meu povo

dá uma olhada aqui: http://www.scriptcase.com.br/forum/index.php/topic,6330.0.html

mendesjunior1,

Me envia o teu email q envio alguns arquivos de exemplo

[]s