Limpando problemas de fontes pdftotext

3

Estou usando o pdftotext para criar uma versão ASCII de um documento PDF (feito com o LaTeX), porque os colaboradores preferem um documento simples no MS Word.

A versão de texto simples que vejo parece boa, mas após uma inspeção mais próxima, o caractere f parece ser freqüentemente convertido erroneamente dependendo de quais caracteres seguem. Por exemplo, fi e fl muitas vezes parecem se tornar um caractere especial, que eu tentarei colar aqui: f e fl.

Qual é a melhor maneira de limpar a saída do pdftotext? Estou a pensar que sed pode ser a ferramenta certa, mas não sei como detetar estes caracteres especiais.

    
por karel 10.12.2010 / 00:06

2 respostas

3

Por padrão, pdftotext gera dados unicode (UTF-8). Se o seu terminal ou editor de texto não suportar UTF-8, ligaduras como "fi" e "fl" (que podem ser representadas como um único caractere em unicode) aparecerão estranhamente, como você notou.

A correção simples é informar pdftotext para saída ASCII em vez de unicode:

pdftotext -enc ASCII7 input.pdf output.txt

Isso deve produzir uma saída ASCII limpa, removendo sua necessidade de limpá-lo manualmente depois.

    
por 11.01.2011 / 05:35
1

Supondo que você esteja em algum tipo de sistema baseado em Unix, você pode rodar isto na saída do pdftotext:

sed -i -e 's/ffi/ffi/g' -e 's/fi/fi/g' -e 's/ff/ff/g' -e 's/fl/fl/g' -e 's/ffl/ffl/g' output.txt

Isso deve substituir as ligaduras com as letras individuais que elas quebram. (Veja meus comentários acima para o que ligaduras têm a ver com isso.)

Eu testei isso em um arquivo de texto gerado por pdftotext de um PDF gerado pelo LaTeX. E funcionou bem. Mas se o LaTeX usou uma codificação não padronizada ou fonte com ligaduras adicionais, pode haver mais a ser feito.

Você provavelmente vai querer ter certeza de que a fonte que você está usando no seu terminal tenha caracteres para as ligaduras da série F. DejaVu Sans Mono é uma boa escolha.

    
por 10.12.2010 / 04:38