Feed e Twitter

Feed RSS Twitter

Busca

Por Lustosa em 08/01/2009 às 00:29

Um problema que as vezes surge é a impressão em formulário contínuo. Seja nota fiscal, etiqueta, ou qualquer outra coisa, muitas vezes precisamos desenvolver uma aplicação que faça isso. O grande problema de imprimir nesse tipo de papel é saber onde a “folha” termina e começa a próxima.

A solução que eu usei pra resolver um problema de impressão de notas fiscais foi usar uma classe do PEAR chamada File_PDF, que como o próprio nome já deixa claro, serve para gerar arquivos PDF.

Como todos sabemos, o formato PDF é ideal para situações em que precisamos ter certeza de que ele sempre será impresso da mesma forma, independente da máquina onde é aberto. O problema em usar outros formatos (DOC do Word, por exemplo), é que as informações necessárias para a impressão não ficam no arquivo. Detalhes como as fontes usadas, os tamanhos, acabam dependendo de configurações de cada máquina.

Voltando ao problema, eu tinha um formulário de 10 páginas para testes, com um tamanho não muito usual, e os campos da nota fiscal que eu precisaria preencher.

Pra resolver o problema do posicionamento, não tem outro jeito, tem que medir com régua mesmo. A idéia é anotar as posições X e Y de cada campo, usando milímetros pra evitar números fracionários. O tamanho do papel também se mede com régua, não tem muito mistério.

Tendo o tamanho do papel e o posicionamento de cada campo, o grande truque é gerar um PDF dinamicamente, com “páginas” do tamanho da nossa nota fiscal, e depois posicionar os textos dentro dessa página.

No fim do script, teremos um PDF já todo pronto pra ser mandado para a impressora, tudo já formatado com o tamanho e posição corretas.

Segue o código, por partes.

<?php
require_once 'File/PDF.php';
 
$pdf = File_PDF::factory(Array('orientation' => 'P',
                               'unit' => 'mm',
                               'format' => Array(206,165)
                        ));
$pdf->setFont('Courier','',10);
?>

Até aqui, sem muitos mistérios. Incluí o arquivo da classe File_PDF, e instanciei um objeto em $pdf. A orientação do documento é P (de Portrait, ou “em pé”), a unidade que eu vou usar será milímetros, e o formato da minha folha é de 206 mm de altura por 165 mm de largura. Depois disso, eu escolho a fonte Courier 10 para o documento inteiro.

<?php
foreach ($venda as $item) {
$pdf->addPage('P');
$pdf->text(171,44,$item['nome_cliente']);
$pdf->text(171,49,'Prest. Serv.');
$pdf->text(171,57,$item['data']);
...
 
}
?>

Agora, eu percorro um vetor ($venda) já criado com as informações que eu precisarei colocar na nota fiscal. Para cada entrada desse vetor, eu crio uma nova página com a mesma orientação (em pé). A partir daí, é só posicionar cada texto. Em 171 x 44, coloco o nome do cliente, em 171 x 49, a natureza da operação, em 171 x 57, a data da venda, e por aí vai.

<?php
header("Content-type: application/pdf");
$pdf->output('notas.pdf',false);
?>

Para terminar, dou a saída do documento. Marco o tipo da saída para “application/pdf”, e mando o objeto soltar o documento para o navegador com o nome de “notas.pdf”. O segundo parâmetro é se a saída é inline ou como um arquivo para download. Passamos false para que o navegador entenda que o PDF é para ser baixado.

Se tudo deu certo, o navegador vai perguntar se você quer abrir ou salvar o PDF. Se abrir em algum programa como o Adobe Reader, basta imprimir diretamente do programa, e bingo. Resolvida a questão.

Artigos relacionados

Arquivado em programação

Feed RSS para os comentários deste artigo.


Fechado!


Copyright 2009 Ataraxia!   Sinopse