Alguns programas no Ubuntu permitem a impressão para o formato PDF, como o Evince e o Gedit. Para ter essa opção disponível em qualquer programa, basta instalar uma impressora virtual de PDF, usando o pacote cups-pdf. Se ele não estiver instalado na sua distribuição, instale-o com o comando sudo apt-get install cups-pdf.
Para criar uma impressora de PDF, acesse a opção System -> Administration -> Printing e depois “New Printer”. Depois selecione “Print into PDF file” como tipo de impressora, e na tela seguinte, “Generic” como fabricante e “PDF file generator” como modelo. Finalmente, dê um nome para a impressora. Feito isso, a impressora de PDF ficará disponível para qualquer programa que tenha a opção de impressão. Os PDFs serão criados no diretório PDF dentro do home do usuário.
O processo acima já foi descrito diversas vezes, em vários blogs e sites sobre Linux. Porém, decidi escrever sobre isso porque a maioria dos artigos pára por aí, não informando como alterar as configurações do cups-pdf e nem como resolver alguns dos problemas mais comuns.
Configurações
O arquivo de configuração do cups-pdf fica em /etc/cups/cups-pdf.conf. Neste arquivo, ficam definidos o diretório de destino dos PDFs, o diretório de spool, as regras para formação dos nomes de arquivos a partir do nome do documento impresso, configurações de segurança e permissões, o grupo de usuários que tem permissão para usar esta impressora, tipo de log, configurações do Ghostscript e outros. Se você alterar algum destes parâmetros, será necessário executar sudo /etc/init.d/cupsys restart para que as modificações tenham efeito.
Problemas
Os problemas mais comuns com o cups-pdf são:
- se após enviar um trabalho para a impressora o arquivo correspondente não aparecer no diretório PDF dentro do seu home (ou o diretório que você tiver definido no arquivo de configuração), verifique o log (por padrão fica em
/var/log/cups/cups-pdf_log). Ele pode ajudar a descobrir o que ocorreu (ex: problemas de permissão) - verifique se o usuário está no grupo correspondente definido no arquivo de configuração (grupo lp por padrão)
- se você alterar o diretório de destino dos PDFs, altere também o arquivo
/etc/apparmor.d/usr.sbin.cupsd, na seção /usr/lib/cups/backend/cups-pdf. Este arquivo contém as regras de segurança do AppArmor, e define os diretórios onde o cups-pdf tem permissão de escrita. Após alterá-lo, executesudo /etc/init.d/cupsys restart - se o log do cups-pdf apresentar a mensagem
"[ERROR] failed to set file mode for PDF file (non fatal)", execute o comandosudo aa-complain cupsd
Parabéns!
Realmente muitos já escreveram sobre como imprimir em pdf, mas ainda não vi nada como este seu post, o qual fala sobre possíveis problemas, e como resolvê-los.
Gostaria de sugerir, e ao mesmo tempo consultar: Como fazer para se atribuir um nome ao arquivo pdf, no momento em se dá o comando para a sua geração?
A idéia é permitir ao usuário, dar o nome à imagem de impressão em pdf, evitando que o sistema atribua o nome por default, pois, caso já exista o arquivo pdf, ele destrói o arquivo existente, e atribui o mesmo nome ao arquivo recém gerado, provocando a perda do anterior.
Um jeito de se evitar esta perda do arquivo existente, é o usuário ser obrigado a renomeá-lo antes de uma nova impressão.
Isto pode acontecer, por exemplo, quando se quer imprimir vários extratos de banco, para meses diferenciados, o sistema dará o mesmo nome ao arquivo, destruindo os anteriores, caso o usuário esqueça de renomeá-los.
Qual a melhor forma, e como se deve fazer para o usuário poder escolher o nome a ser dado ao arquivo pdf, no momento que ele se dá o comando?
Parabéns pelo post.
Acredito que o cups-pdf vem instalado por padrão no Ubuntu, pois instalei 2 máquinas recentemente, e ambas já tem a opção de impressão em PDF.
No Ubuntu Gutsy, e talvez em muitas outras distros, a opção de impressão em .pdf já ñ vem habilitada?
Fiz um teste aqui e confimei isso, além tb de se ter a opção por arquivo postscript, em se selecionando impressão p/ arquivo.
Ricardo,
conforme escrevi no post, essa opção de impressão para PDF existe em alguns programas específicos (já vi no Evince e no Gedit). Mas criando a impressora com o cups-pdf, ela fica disponível para qualquer programa que tenha a opção imprimir.
Adam,
não descobri uma maneira de perguntar ao usuário o nome do arquivo. Há um programa para Windows chamado PDF Creator (http://sourceforge.net/projects/pdfcreator/) que faz exatamente isso, mas no Linux não sei se é possível fazer algo parecido.
O cups-pdf permite definir no arquivo de configuração as regras para formação do nome, a partir do título do documento (seção “Filename Settings” deste arquivo). É possível, por exemplo, incluir o número do job no nome do arquivo, para evitar que um arquivo que já exista com esse nome seja sobrescrito.
Há um outro parâmetro “TitlePref” que permite passar o título por linha de comando. Só que ainda não consegui usar.
conteúdo do log:
Sun Feb 15 13:28:54 2009 [ERROR] failed to set file mode for PDF file (non fatal) (/home/lucianno/Test_Page.pdf)
então
“se o log do cups-pdf apresentar a mensagem “[ERROR] failed to set file mode for PDF file (non fatal)”, execute o comando sudo aa-complain cupsd”
…acho que era isso que faltava =],
[]’s
Luciano