LC
[DÚVIDA] Mais de um recibo por página usando o PDF Designer
Boa tarde galera.
Estou montando um sistema de geração de recibos(honorários). Já montei o layout pelo PDF Designer e gostaria de saber se há alguma maneira de gerar mais de um recibo por página, pois eu consigo gerar um por página. Antes de jogar os dados do banco fiz um teste mas só gera um por página. Alguém tem uma solução? segue o código do loop
Estou montando um sistema de geração de recibos(honorários). Já montei o layout pelo PDF Designer e gostaria de saber se há alguma maneira de gerar mais de um recibo por página, pois eu consigo gerar um por página. Antes de jogar os dados do banco fiz um teste mas só gera um por página. Alguém tem uma solução? segue o código do loop
public function onGeraBoleto(){
try
{
$designer = new TPDFDesigner;
$designer->fromXml('app/reports/honorarios.pdf.xml');
$designer->SetFont('Arial', 'B', 12);
//$designer->setFontColorRGB( '#4C4491' );
$designer->SetAutoPageBreak(TRUE, 2);
//loop para gerar os boletos
for ($i=0;$i<12;$i++){
$designer->generate();
$designer->writeAtAnchor('nDocumento', '1');
$designer->writeAtAnchor('nDocumento1', '1');
$designer->writeAtAnchor('nParcela', '1/1');
$designer->writeAtAnchor('nParcela1', '1/1');
$designer->writeAtAnchor('dVencimento', '24/01/2017');
$designer->writeAtAnchor('dVencimento1', '24/01/2017');
$designer->writeAtAnchor('vDocumento', '3500,00');
$designer->writeAtAnchor('vDocumento1', '3500,00');
//$designer->writeAtAnchor('lPagamento', 'Solimar Contabilidade');
$designer->writeAtAnchor('nCarne', '01');
$designer->writeAtAnchor('tEspecie', utf8_decode('R$'));
$designer->writeAtAnchor('dProcessamento', '24/01/2017');
//$designer->writeAtAnchor('nCedente', utf8_decode('SOLIMAR CONTABILIDADE'));
$designer->writeAtAnchor('nSacado', 'Teste');
$designer->writeAtAnchor('nEndereco', 'Rua de teste - Centro');
$designer->writeAtAnchor('nCPFPJ', '000.000.000-00');
$designer->writeAtAnchor('nInstrucao01', utf8_decode('Instrução 01'));
//$designer->writeAtAnchor('nInstrucao02', utf8_decode('Instrução 02'));
$designer->writeAtAnchor('nReferencia', utf8_decode('Honorários Contábeis - Mensalidade'));
//$designer->addPage();
}//endfor
$file = 'app/output/honorarios.pdf';
if (!file_exists($file) OR is_writable($file))
{
$designer->save($file);
parent::openFile($file);
}
else
{
throw new Exception(_t('Permission denied') . ': ' . $file);
}
new TMessage('info',_t( 'Report generated. Please, enable popups in the browser (just in the web).'));
}
catch (Exception $e) // in case of exception
{
new TMessage('error', '<b>Error</b> ' . $e->getMessage());
}
}
Como as âncoras tem posições fixas acho que não é possível. Você teria que criar no designer uma âncora diferente para cada recibo desejado.
Obrigado pelas informações. Busquei em outros fóruns mas também nada rsr
Estes dias fiz um teste e aceita mais de uma ancora com o mesmo nome, Então acho que seria o caso de colocar estas ancoras duas vezes no form na posição que vc precisa.
[]'s
Stclara.
Carlos, eu resolvi de uma forma, meio robusta mas atende minhas necessidades, da seguinte maneira:
1 - Criei um layout com três recibos/boletos em uma mesma página mas com âncoras diferentes;
2 - Como o sistema vai gerar sempre 12 boletos, criei um loop pra buscar no banco de dados (ainda em desenvolvimento rsrs) que irá jogar os dados nas âncoras dependendo do número da parcela do boleto. Ex: parcela 1, 4, 7 e 10 sempre estarão no primeiro boleto da página.
Falta integrar ao banco de dados mas nos testes já funcionou perfeitamente.
Segue um trecho do código pra ajudar alguém que esteja com o mesmo problema:
<php
public function onGeraBoletoAnual(){
try
{
$designer = new TPDFDesigner;
$designer->fromXml('app/reports/honorarios3.pdf.xml');
$designer->SetFont('Arial', 'B', 12);
//$designer->setFontColorRGB( '#4C4491' );
$designer->SetAutoPageBreak(TRUE, 2);
//loop para gerar os boletos
//for ($i=1;$i<12;$i++){
$i=1;
while ($i<=12){
//GERA BOLETOS 1, 4, 7 E 10 NO PRIMEIRO MODELO DA PÁGINA
$designer->generate();
if (($i == 1) or ($i == 4) or ($i == 7) or ($i == 10)){
//$designer->generate();
$designer->writeAtAnchor('nDocumento1', $i);
$designer->writeAtAnchor('nDocumento2', '1');
$designer->writeAtAnchor('nParcela1', '1/1');
$designer->writeAtAnchor('nParcela2', '1/1');
$designer->writeAtAnchor('dVencimento1', '24/01/2017');
$designer->writeAtAnchor('dVencimento2', '24/01/2017');
$designer->writeAtAnchor('vDocumento1', '3500,00');
$designer->writeAtAnchor('vDocumento2', '3500,00');
$designer->writeAtAnchor('nCarne1', '01');
$designer->writeAtAnchor('tEspecie1', utf8_decode('R$'));
$designer->writeAtAnchor('dProcessamento1', '24/01/2017');
$designer->writeAtAnchor('nSacado1', 'Teste');
$designer->writeAtAnchor('nEndereco1', 'Rua de teste - Centro');
$designer->writeAtAnchor('nCPFPJ1', '000.000.000-00');
$designer->writeAtAnchor('tMensagem1', utf8_decode('Instrução 01'));
$designer->writeAtAnchor('tReferencia1', utf8_decode('Honorários Contábeis - Mensalidade'));
$i++;
//$designer->addPage();
}//endif
//GERA BOLETOS 2, 5, 8 E 11 NO SEGUNDO MODELO DA PÁGINA
if (($i == 2) or ($i == 5) or ($i == 8) or ($i == 11)){
//$designer->generate();
$designer->writeAtAnchor('nDocumento3', $i);
$designer->writeAtAnchor('nDocumento4', '1');
$designer->writeAtAnchor('nParcela3', '1/1');
$designer->writeAtAnchor('nParcela4', '1/1');
$designer->writeAtAnchor('dVencimento3', '24/01/2017');
$designer->writeAtAnchor('dVencimento4', '24/01/2017');
$designer->writeAtAnchor('vDocumento3', '3500,00');
$designer->writeAtAnchor('vDocumento4', '3500,00');
$designer->writeAtAnchor('nCarne2', '01');
$designer->writeAtAnchor('tEspecie2', utf8_decode('R$'));
$designer->writeAtAnchor('dProcessamento2', '24/01/2017');
$designer->writeAtAnchor('nSacado2', 'Teste');
$designer->writeAtAnchor('nEndereco2', 'Rua de teste - Centro');
$designer->writeAtAnchor('nCPFPJ2', '000.000.000-00');
$designer->writeAtAnchor('tMensagem2', utf8_decode('Instrução 01'));
$designer->writeAtAnchor('tReferencia2', utf8_decode('Honorários Contábeis - Mensalidade'));
$i++;
}
//GERA BOLETOS 3, 6, 9 E 12 NO TERCEIRO MODELO DA PÁGINA
if (($i == 3) or ($i == 6) or ($i == 9) or ($i == 12)){
//$designer->generate();
$designer->writeAtAnchor('nDocumento5', $i);
$designer->writeAtAnchor('nDocumento6', '1');
$designer->writeAtAnchor('nParcela5', '1/1');
$designer->writeAtAnchor('nParcela6', '1/1');
$designer->writeAtAnchor('dVencimento5', '24/01/2017');
$designer->writeAtAnchor('dVencimento6', '24/01/2017');
$designer->writeAtAnchor('vDocumento5', '3500,00');
$designer->writeAtAnchor('vDocumento6', '3500,00');
$designer->writeAtAnchor('nCarne3', '01');
$designer->writeAtAnchor('tEspecie3', utf8_decode('R$'));
$designer->writeAtAnchor('dProcessamento3', '24/01/2017');
$designer->writeAtAnchor('nSacado3', 'Teste');
$designer->writeAtAnchor('nEndereco3', 'Rua de teste - Centro');
$designer->writeAtAnchor('nCPFPJ3', '000.000.000-00');
$designer->writeAtAnchor('tMensagem3', utf8_decode('Instrução 01'));
$designer->writeAtAnchor('tReferencia3', utf8_decode('Honorários Contábeis - Mensalidade'));
$i++;
}
}//endwhile
$file = 'app/output/honorarios.pdf';
if (!file_exists($file) OR is_writable($file))
{
$designer->save($file);
parent::openFile($file);
}
else
{
throw new Exception(_t('Permission denied') . ': ' . $file);
}
new TMessage('info','Relatório gerado com sucesso. Desbloqueie as Pop ups');
}
catch (Exception $e) // in case of exception
{
new TMessage('error', 'Error ' . $e->getMessage());
}
}
?>
Leildon Santos Carvalho, você conseguiu integrar com o Banco de Dados?
Se sim, poste aqui para tirar minha dúvida também por gentileza.
Bom dia Paulo. Consegui sim. Vou postar parte do código.
Boa tarde Leildon, veja o código que digitei, porém, o recibo (pdf) abre em branco, ou seja os campos não são preenchidos. Poderia analisar o código pra mim amigo? Desde já agrdeço.