Template Cabeçalho no PDF

Caros colegas,

Procurei de todas formas e não consegui encontrar uma forma de utilizar templates para os cabeçalhos das aplicações Report PDF.
Não existe mesmo uma forma de usar isso, como fazemos com as aplicações de formulários e consultas?
Tenho mesmo que em todo PDF criado criar e posicionar todos os objetos do cabeçalho, ainda que, geralmente, isso seja igual em todos os relatórios do sistema?

Só para constar, estou migrando um sistema para SC 7 e o Report PDF é fantástico e, para evitar problemas com configurações locais de impressoras, todos meus relatórios serão em PDF. Mas estou achando um tanto quanto absurdo se não tiver uma forma de usar templates nos cabeçalhos e rodapés desse tipo de aplicação.

É por isso que prefiro gerar meus reports PDF fora do SC, utilizando a mesma FPDF, porém criando os scripts por fora.

Isso me dá mais flexibilidade e posso, por exemplo, definir o cabeçalho a ser utilizado em todas os reports.

Esse cabeçalho é definido implementando-se método Header().

Abraço.

Wennys Carlos
Skype: wennys.carlos

Para tal, eu criei uma biblioteca que escreve um cabeçalho padrão e utilizo em todos os report pdf.
Não vejo grandes problemas nisso.

Carol, poderia detalhar a forma como implementou e utiliza essa biblioteca nos PDFs?

Sou sou leigo nem preguiçoso, mas só quero evitar perder tempo (coisa que não ando tendo muito) descobrindo sozinho como implementar e usar isso.

Obrigado!

Para terem uma idéia, segue o template que tinha criado para usar nos PDFs, achando que tinha como:

#tab_cab_rel {width: 100%; border-bottom: 2px solid black;} .centro {width: 100%; } .direita {width: 240px; } #img_logo_rel { width: 170px; } #empresa_rel { width: 100%; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: center; color: #000000; } #titulo_rel { width: 100%; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: center; color: #000000; } #filtro_rel { width: 100%; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: center; color: #000000; } #data_rel { width: 170px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: right; color: #000000; } #paginas_rel { width: 170px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; text-align: right; color: #000000; }
{nome_empresa}
{titulo_relatorio} {numero_pagina}
{filtro} {data}

Esse código não funciona com arquivos PDF. Isso é um código HTML.
Existem classes que convertem código HTML em pdf, que talvez possa incorporar na classe fpdf utilizada pelo SC.

Consulte: http://fpdf.org

Carol,

Você não entendeu o que eu tinha feito. Não sou leigo a ponto de achar que esse código html seria reconhecido na área de codificação do PDF. Esse html é de um template que criei nos templates de cabeçalho do SC e esperava ter a opção de escolhê-lo no cabeçalho do Report PDF, mas não há essa opção.

Sobre estudar o fpdf e para criar uma biblioteca, posso fazer isso sem problemas, mas o propósito de se usar uma ferramenta como o SC é justamente não precisar implementar coisas básicas e rotineiras como um cabeçalho de relatório,não acham?

A ferramenta não disponibiliza essa opção para aplicações do tipo REPORT PDF.
Um RAD não pode fazer tudo infelizmente.

Oi Carol, então eu poderia criar um formulário “blank” e adicionar o código “PHP” do FPDF?
Seria isso o contorno?
É possível colocar esta bilbioteca como uma macro dentro do SC?

Marcelo

Pode sim usar Blank com a classe fpdf, mas pode também utilizar a própria report pdf, que já vem com o select principal e opções de filtro, e no seu código, você atribui a chamada a função (biblioteca) que escreve o cabeçalho ou rodapé num padrão a ser utilizado em todas aplicações desse tipo.
A biblioteca por si só pode buscar a imagem de logo, nome da empresa, data hora, ou receber como parâmetros esses valores, e função apenas escreve no pdf posicionando adequadamente os campos.

Prezados, olha como tô me virando…

http://www.youtube.com/watch?v=_Mr0K8r5uB8

Jean,

Obrigado pela sua boa vontade de compartilhar sua solução. Mas acho que está tendo um trabalhão atoa nesse seu exemplo, porque está desenhando as linhas/quadros com comandos fpdf.
Para criar relatórios que não contêem apenas texto (NF, Holerit, NS, etc), é mais fácil você criar uma imagem com sua ferramenta de imagens de preferência (a melhor para mim é o Corel Draw, mas conegue fazer isso até no PaintBrush) e usar essa imagem com fundo do seu pdf (Configurações -> Configuração da Visualização do PDF -> Imagem). Só lembre-se de sempre criar a imagem com resolução adequada ao tamanho a ser impresso e na mesma proporção (aspecto).
Um exemplo de uso de imagem de fundo dessa forma (só que acho que em outro tipo de aplicação, mas a funcionamento é o mesmo) está na base de conhecimento do SC para geração de Boleto Bancário. Vale a pena dar uma olhada.

Abraço!

Ahhh! Estou criando uma biblioteca usando o fpdf para customizar meus cabeçalhos. Assim que terminar posto a solução nesse tópica para os colegas.

Erikson, eu começei justamente por esse método, no entanto o mesmo se limita a 1(uma) pagina… quando o relatório passa de 1(uma) pagina a segunda fica sem a imagem de fundo, logo há a necessidade de usar esse recurso que mostrei… e te garanto que é menos massante que criar o layout completo no fpdf…

Caros colegas,

Acabei desenvolvendo uma solução de criar scripts FPDF para o cabeçalho e o rodapé que posteriormente colocarei em uma lib para aproveitar em todos os meus Reports PDF.
Estou compartilhando aqui o que fiz para que os interessados vejam como fiz para usar e, se for o caso, sugerir melhorias.

PDFs de registro por página (NFe, Boleto, Recibo, etc): apenas uso a imagem com o layout (jpg ou png) como fundo (como mencionado na minha msg anterior deste tópico) e organizo os campos usando os recursos nativos/normais do Report PDF do SC.

PDFs de registros por linha, uso comando FPDF para compor o cabeçalho e rodapé e os registros eu organizo usando recursos nativos do SC. Abaixo estão os scripts usados em Cab/Rod:

Observação: Configurações: Registros por linha; A4; Milímetros; margens(CBDE) 8,15,5,5; Altura Inicial 30

LayoutPDF -> Codigo -> Cabeçalho:

/***

  • variaveis usadas ( prefixos: g global (sistema todo) - i instancia (aplicacao) - s string
  • gs_razao_social - global criada no login
  • is_titulo - atributo criado na aplicacao e setado no evento onApplicationInit
    */

// coloca o logo no cabecalho (se não tiver imagem única, use variavel aqui no caminho)
$this->Image(’…/_lib/img/grp__NM__logo.png’, 5, 10, 40, 12);

// escreve o nome da empresa na 1a linha do cabecalho - centralizado
$this->SetFont(‘Arial’, ‘’, 12);
$this->Cell(0, 5, utf8_decode([gs_razao_social]), 0, 0, ‘C’);

// escreve a data e hora atual na 1a linha do cabecalho - a direita
$this->SetFont(‘Arial’, ‘’, 8 );
$this->Cell(0, 5, date(‘d/m/Y - h:m’), 0, 0, ‘R’);

// escreve o titulo 2a linha do cabecalho - centralizado
$this->SetY(14);
$this->SetFont(‘Arial’, ‘’, 10);
$this->Cell(0, 5, utf8_decode([is_titulo]), 0, 0, ‘C’);

// escreve o filtro 3a linha do cabecalho - centralizado
$this->SetY(20);
$this->SetFont(‘Arial’, ‘I’, 9 );
$this->Cell(0, 5, utf8_decode(is_filtro), 0, 0, ‘C’);

// linha que separa o cabecalho dos registros
$pdf->Line(6, 25, 203, 25);

LayoutPDF -> Codigo -> Rodapé:

// linha que separa o rodape
$pdf->Line(6, 284, 203, 284);

// posiciona o cursor logo abaixo da linha
$this->SetY(286);

// seta a fonte do rodape
$this->SetFont(‘Arial’, ‘I’, 8 );

// escreve o texto da esquerda
$this->Cell(0, 0, utf8_decode(‘SisXX - Sistema de Xxxxxxxx Xxxxxx’), 0, 0, ‘L’);

// escreve o texto da direita. no caso, o nome do sistema
$this->Cell(0, 0, utf8_decode('Pagina ‘) . $this->PageNo() . ’ de {nb}’, 0, 0, ‘R’);

Melhorias:

  • Colocar isso numa biblioteca e apenas chamar passando as variáveis locais ou de instância necessárias.
  • No rodapé, o texto ‘Pagina’ está sem acento porque um bug do SC7 faz acentos nessas seções zicarem em símbolos. Quem quiser pode usar um atributo de aplicação com o texto e instanciá-lo com acento no evento onApplicationInit que resolve (estou sem saco para fazer isso… rs).

Quem tiver solução melhor ou mesmo melhorias nessa, sinta-se à vontade. Afinal, a união faz açúcar!!

Abraço a todos.

Erikson,

Encaminhei sua sugestão para nossa equipe.

att,
Bernhard Bernsmann

Para os acentos ficarem corretos, basta usar nos Atributos, Aspas Duplas [""] eu vez de usar Aspas Simpes [’’].

gerfferson,

Meu problema com os acentos persistem.
Veja, por favor, mais detalhes a respeito no tópico abaixo e, se tiver solução para o problema, responda-o.

http://www.scriptcase.com.br/forum/index.php/topic,8576.msg41866.html#msg41866

De antemão, agradeço.

Caros colegas,

Na luta para padronizar sem replicar código nos meus PDFs criei uma biblioteca com o cpodigo mencionado anteriormente. O problema é que inserimos uma biblioteca na aplicação Report PDF ela é inserida apenas no arquivo principal do PDF (_grid.class.php). Como o cabeçalho e rodapé são gerados em arquivo separado pelo SC (_head_foot.php), não podemos utilizar no cabeçalho e rodapé as funções da biblioteca inserida, pois elas estão disponíveis apenas no Código do Corpo. Para contornar isso, a solução que encontrei foi fazer um include do arquivo principal no arquivo de cabeçalho e rodapé, para ter disponíveis as funções da biblioteca, conforme abaixo:

// pega o nome da aplicacao rodando
$ls_nome_aplic = str_replace("_head_foot", “”, basename(FILE, “.php”));

// inclui o arquivo principal do pdf, que contem as bibliotecas incluidas
include(getcwd() . $ls_nome_aplic . “_grid.class.php”);

// cria uma instancia da classe principal para usar as funcoes de pdf contidas nela
$class = $ls_nome_aplic . “_grid”;
$pdf_root = new $class;

// chama a funcao de impressao do cabecalho, passando os parametros
$pdf_root->sb_pdf_teste(“Titulo”, “FiltroCabecalhoNoRodape”);

Com isso resolvi o problema de enxergar as funções da biblioteca nas sessões Cabeçalho e Rodapé!
O problema agora é só descobrir como chamar as funções do FPDF de dentro das funções da biblioteca. Já tentei com $this->Cell, com $pdf->Cell, com sc_pdf_cell… e nada! Se alguém tiver a solução, serei grato.

A propósito, não seria uma ótima sugerirmos à NM que disponibilizasse também nas sessões de Cabeçalho e Rodapé as bibliotecas inseridas na aplicação Report PDF?