Criando arquivos PDF

O PDF (Portable Document Format) é um formato de arquivo, desenvolvido pela Adobe Systems em 1993, para representar documentos com textos, gráficos e imagens de maneira independente do aplicativo, do hardware e do sistema operacional usados para criá-los. A maioria das distribuições Linux já tem leitores próprios, enquanto que no Windows o Acrobat Reader é o mais famoso, porém muito pesado – uma opção bem melhor é o Foxit Reader.

Existem diversas formas para escrever um arquivo PDF. Uma das mais populares é escrever um documento ODF (do LibreOffice) ou DOC (do Microsoft Word) e exportar nesse formato, ou então mandar imprimir uma página HTML e, em vez de usar a impressora normal, usar um programa que grave em PDF.

O documento pode ser convertido diretamente na internet, sem instalar programas, através de sites como o Convert Files – esse foi o que experimentei o melhor resultado visual com máxima compressão, sendo rápido e permitindo a exclusão do arquivo após seu download. Outro exemplo é o Online PDF Converter, que permite mudar a resolução de saída, converter vários arquivos ao mesmo tempo ou juntá-los ou mesmo separar as páginas em novos arquivos PDF. Também é possível juntar online arquivos PDF no site smallpdf, que também possui as opções de dividir, converter de/para JPG e de/para Office. Para compressão, é bom também a do site I love PDF.

Juntar imagens em arquivo PDF no Linux

Nomeie as imagens JPG/JPEG na ordem em que elas devem ser incluídas no futuro arquivo PDF (imagem1.jpg, imagem2.jpg, ou 1.jpg, 2.jpg…), coloque tudo em um mesmo diretório e execute o seguinte comando:

$ convert *.jpg meu_arquivo.pdf

Também é possível informar uma a uma as figuras ou aplicar outras regras.

LaTeX

LaTeX é um conjunto de macros para o programa de diagramação de textos TeX, muito utilizado para escrever monografias e textos científicos. O usuário deve escrever um conjunto de comandos de alto nível e depois utilizar um compilador que criará um arquivo PDF conforme as instruções gravadas. Sua concepção de uso é permitir ao usuário focar no conteúdo, utilizando outro momento para desenvolver a aparência do texto. Veja mais clicando no link LaTeX.

Shell script

Primeiramente, um arquivo HTML pode ser gerado imprimindo linha a linha usando shell script. Isso permite fazer a leitura de arquivos gerados em outras fontes e montar a página com informações atualizadas. Um exemplo disso está no post Arquivo HTML para apresentar dados CSV. O programa “wkhtmltopdf” converte o HTML gerado para PDF. Para instalá-lo, basta executar “sudo apt-get install wkhtmltopdf”. Seu uso se dá dessa forma:

$ wkhtmltopdf file_in.html file_out.pdf

Para diferentes tamanhos de páginas e outras opções, consulte o manual do wkhtmltopdf.

Caso essa linha de comando esteja no crontab e/ou apareça uma mensagem do tipo “wkhtmltopdf: cannot connect to X server“, será necessário executar o comando usando um servidor gráfico X, como o Xvfb. Ele pode ser executado em máquinas sem hardware de exibição e sem dispositivos de entrada físicos, emulando um framebuffer mudo usando a memória virtual. Para isso, instale e execute o comando usando as seguintes linhas:

$ sudo apt-get install xvfb
$ xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf file_in.html file_out.pdf

Note que a diferença foi acrescentar o comando “xvfb-run” – o parâmetro “-a” evita abrir múltiplas janelas e gerar erros do tipo “xvfb-run: error: Xvfb failed to start”, sendo “screen” opcional.

PHP e linha de comando

Uma opção seria usar o próprio programa “php” para gerar um arquivo HTML do jeito que quiser e depois usar o programa “wkhtmltopdf” para convertê-lo para PDF. Veja esse exemplo:

<?php define ('PATH','/dados/www/produtos'); $filename = 'Relatorio-'.date('m').'-'.date('Y').'.pdf'; exec('php '.PATH.'/gera_html.php > '.PATH.'/arq_html.html');
exec('xvfb-run -a -s "-screen 0 640x480x16" /usr/bin/wkhtmltopdf '.PATH.'/arq_html.html '.PATH.'/'.$filename.' 2>&1');
?>

Para utilizar esse script, você deve instalar os programas necessários: “sudo apt-get install wkhtmltopdf xvfb”. É possível configurar o arquivo gera_html.php para receber variáveis do usuário, tornando o documento mais “interativo”. Existem também classes PHP que geram o PDF, como o FPDF e o TCPDF.

Python

Existe uma biblioteca do Python chamada pdfkit que é um wrapper do wkhtmltopdf. Pra instalar, use o comando “sudo pip install pdfkit”. Segue o script para exportar o HTML para PDF:

# exportpdf.py
import pdfkit
import sys

pdfkit.from_file(sys.argv[1], sys.argv[2])

O primeiro argumento na execução do script é o nome do arquivo HTML e o segundo é o do PDF. Deve-se abrir uma screen, conforme mencionado na parte do wkhtmltopdf.

JavaScript

Veja a seguir algumas opções usando JavaScript:

Chama a caixa de diálogo para impressão conteúdo de div (identificada pelo ID) usando JavaScript, com função ativada pelo clicar do botão. É possível incrementar o texto a ser impresso através da variável “document.body.innerHTML” no script, inclusive recebendo variáveis php como parâmetro de entrada. Um dos pontos negativos desse caso é imprimir com aquele cabeçalho e rodapé que o navegador insere automaticamente. O usuário pode editar o browser para não imprimir “header and footer”, mas geralmente o melhor é evitar esse tipo de coisa.

Recebe dados via formulário HTML e imprime PDF contendo texto e as variáveis enviadas, selecionadas pelo ID. Se quiser passar elementos mais complexos (uma tabela, por exemplo), aí complica. Usa jQuery e o arquivo “jspdf.debug.js” além dos arquivos “basic” descritos na página.

GUI para edição de PDF

Um bom programa no Linux para edição de arquivos PDF (como inclusão de comentários e preenchimento de formulários), é o Master PDF – o link aponta para um tutorial de instalação.

Plugin no WordPress

Se você for administrador de um site WordPress, você pode instalar um plugin que inclui um botão para imprimir em PDF (ou diretamente na impressora) a página corrente do site. O plugin PDF & Print by BestWebSoft permite adicionar botões para essas funções em páginas, posts, etc e que pode ser restritor por tipo de usuário (como administrador ou qualquer visitante). Ele permite personalizar a saída (output) para pegar apenas o conteúdo principal (sem cabeçalho, colunas laterais ou propaganda) e usando as opções de estilo da página. Caso use as opções “default” de estilo, provavelmente vai aparecer um fundo cinza, que pode ser excluído editando o arquivo no Google Docs – nesse caso, conferir se a conversão de formato não mudou alguma coisa.

Compartilhe :)

2 comments

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.