terça-feira, 12 de abril de 2016

Imprimir declaração de IRS no Ubuntu 16.04

Já alguma vez tentou usar o botão Imprimir na aplicação da AT no Linux?
Não funciona. E porque?

A Aplicação da AT  invoca um comando no sistema para imprimir documentos através do browser.
Em "erro.log" é possível ver a mensagem de erro.

"Could not invoke browser, command=netscape -remote openURL(http://www.portaldasfinancas.gov.pt/)"

Netscape? Segundo a Wikipedia o Netscape foi descontinuado desde 2008. E mesmo que ainda tivesse suporte nada garante que o browser A, B ou C está instalado no sistema.

O ideal seria invocar o browser assim:
xdg-open http://www.portaldasfinancas.gov.pt/

A vantagem de usar o xdg-open é que ele abre sempre o programa "default" instalado no sistema. Seja ele qual for, Firefox, Chrome, Icewasel, Opera etc...

Outro problema e que os "documentos" em html que a aplicação da AT manda imprimir não tem codificação unicode utf-8. Isso faz com que apareçam caracteres estranhos no Linux.

Para "resolver" estes dois problemas comece por criar uma pasta como o nome de bin dentro da pasta do utilizador. Não precisa do sudo.

mkdir -p ~/bin

Dentro da pasta bin crie um shell script com o seguinte conteúdo:

#!/bin/bash
#Tweak para a aplicação de IRS da AT "imprimir" documentos

URL=`echo $2 | cut -d\( -f2 | cut -d\) -f1`

#Resolvendo o problema da codificação de caracteres
URL2=`echo $URL | cut -d/ -f3-`
[ `echo $URL | grep 'file:////'` ] && [ `echo $URL | grep '.html'` ] && sed -i '/<head>/a <meta http-equiv="Content-Type" content="text/html;charset=utf-8">' $URL2

xdg-open $URL

exit

Grave com o nome de netscape dentro da pasta bin. Não se esqueça que o nome do shell script tem de ser "netscape" sem aspas.
De permissão para executar o ficheiro.


chmod +x ~/bin/netscape

Esta "solução" é um tweak, para que a aplicação da AT chame este script que vai abrir o browser "default" e utiliza o segundo parâmetro como url. Além disso o script utiliza o comando sed para inserir a codificação utf-8, caso se trate de um ficheiro html. Se for um pdf o xdg-open encarrega-se de abrir o programa de leitura de pdf default. Depois e só utilizar o botão imprimir desse programa.
A verdadeira solução era a AT actualizar a aplicação do IRS passando a utilizar codificação unicode utf-8 nos "documentos" em html que manda imprimir. e utilizar o xdg-open.