Como extrair dados de arquivo PDF

O PDF é um formato de arquivo muito utilizado para representar documentos de maneira independente do aplicativo, do hardware e do sistema operacional usados para criá-los – veja no link algumas formas de criar arquivos PDF. No entanto, quem pretende utilizar parte da informação contida no documento acaba tendo de suar um pouco, já que o texto copiado fica com a formatação muito “bagunçada” quando é colado.

Existem programas que extraem o texto puro sem formatação (ASCII), que poderá ser ser utilizado posteriormente por outros programas. O ps2ascii usa o gs1 para extrair o texto ASCII de arquivos PostScriptTM (PS) ou PDF e geralmente já vem instalado junto com o Debian. Veja um exemplo de seu uso:

Existem outros programas, cada um com um resultado diferente. Teste diferentes opções até encontrar o que gere um resultado melhor aproveitável para você. Outro opção é o PDFtoText – instalado usando “sudo apt-get install xpdf”:

Caso necessite manipular o arquivo PDF antes, existe o PDF Toolkit, ou PDFtk – instalado através do comando “sudo apt-get install pdftk”. Veja alguns exemplos de sua utilização:

Com o texto puro, chega a hora de tratar a informação. Nesse ponto, cada caso é um caso. Veja como ficou uma tabela, feita no word/excel e cujo arquivo foi convertido para PDF usando o “pdftotext” (usando o ps2ascii e o mesmo arquivo PDF, o resultado ficou bem diferente, com o mês, os pontinhos e o valor todos na mesma linha, inclusive da tabela que estava ao lado):

Note que a primeira linha de texto corresponde à primeira linha de números, e assim por diante. Existiam várias tabelas dentro do mesmo arquivo dispostas da mesma forma. Para fazer a correspondência, criei uma variável para receber o número da primeira linha de valores numéricos. Dentro de um laço, para cada mês, deve-se gravar os valores em “colunas” (ou seja, os primeiros valores das tabelas todos na mesma linha e separados por vírgula), apagando os pontos (os valores estavam com pontos para separar casa do milhar, o que não é utilizado em programação).

Para complicar, também quis inverter a posição de duas colunas. Todo o resultado foi gravado com um cabeçalho em um arquivo CSV. Veja como ficou o script:

O comando sed é executado primeiramente para selecionar as linhas cuja numeração é informada pela variável. Sua saída é encaminhada para outro sed, que substitui a quebra de linha (\n) por uma vírgula. Por último, são apagados os pontos do arquivo.

Para trocar duas colunas de posição, é utilizado o comando AWK, sendo definida a vírgula como parâmetro que separa os campos – a variável t recebe provisoriamente a coluna dois, já que ela recebe a coluna 3, e depois a coluna 3 recebe a coluna que está na variável provisória. Por fim, os espaços em branco criados entre as colunas são substituídos por vírgulas.

Para baixar e extrair dados de arquivo de planilha (XLS), clique no link para ver como fazer via shell script.