Alguém pode recomendar uma biblioteca / API para extrair o texto e as imagens de um PDF? Precisamos ser capazes de acessar o texto que está contido nas regiões pré-conhecidas do documento, portanto a API precisará nos fornecer informações posicionais de cada elemento da página.
Gostaríamos que esses dados fossem impressos xml
ou json
formatados. Atualmente, estamos vendo o PdfTextStream, que parece muito bom, mas gostaria de ouvir as experiências e sugestões de outras pessoas.
Existem alternativas (comerciais ou gratuitas) para extrair texto de um PDF programaticamente?
pdf
text
ghostscript
extraction
text-extraction
Budda007
fonte
fonte
/^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg
. Ele apenas procura o operador Tj / TJ, que indica todo o texto normal em um PDF.Respostas:
Foi-me dado um arquivo pdf de 400 páginas com uma tabela de dados que eu tinha que importar - felizmente sem imagens. O Ghostscript funcionou para mim:
gswin64c -sDEVICE=txtwrite -o output.txt input.pdf
O arquivo de saída foi dividido em páginas com cabeçalhos, etc., mas foi fácil escrever um aplicativo para remover linhas em branco etc., e absorver todos os 30.000 registros.
-dSIMPLE
e-dCOMPLEX
não fez diferença neste caso.fonte
gs
vez degswin64c
. Funciona perfeitamente. Nenhuma porcaria paga patenteada. Isso simplesmente funciona.-sDEVICE=txtwrite
faz? Eu não entendo muito depois de ler Como usar o Ghostscript | Selecionando um dispositivo de saídagswin64c -sDEVICE=txtwrite -o- input.pdf
. Fonte (ligeiramente alterada por mim): gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526acDesde hoje eu sei: a melhor coisa para a extração de texto de PDFs é o TET, o kit de ferramentas de extração de texto . TET faz parte da família de produtos PDFlib.com.
PDFlib.com é a empresa de Thomas Merz. Caso você não reconheça o nome dele: Thomas Merz é o autor da "Bíblia PostScript e PDF".
A primeira encarnação do TET é uma biblioteca . Provavelmente, é possível fazer tudo o que o Budda006 queria, incluindo informações posicionais sobre todos os elementos da página. Ah, e também pode extrair imagens. Ele recombina imagens fragmentadas em pedaços.
O pdflib.com também oferece outra encarnação dessa tecnologia, o plug-in TET para Acrobat . E a terceira encarnação é o PDFlib TET iFilter . Essa é uma ferramenta independente para as áreas de trabalho dos usuários. Ambos são gratuitos (como na cerveja) para uso particular e não comercial.
E é realmente poderoso. Muito melhor do que a extração de texto da própria Adobe. Ele extraiu texto para mim, onde outras ferramentas (incluindo a Adobe) cospem apenas lixo.
Acabei de testar a ferramenta autônoma de desktop, e o que eles dizem em suas páginas é verdadeiro. Tem uma linha de comando muito boa. Alguns dos meus arquivos de teste PDF "problemáticos" que a ferramenta manipulou para minha total satisfação.
De agora em diante, isso será minha recomendação para todos os requisitos de extração de texto em PDF sofisticados e desafiadores.
TET é simplesmente incrível. Ele detecta tabelas. Nas tabelas internas, identifica células que abrangem várias colunas. Ele identifica as linhas da tabela e o conteúdo de cada célula da tabela separadamente. Lida muito bem com hifenizações: remove hífens e restaura palavras completas. Ele suporta idiomas não ASCII (incluindo CJK, árabe e hebraico). Ao encontrar ligaduras, restaura os caracteres originais ...
De uma chance.
fonte
Uma ferramenta eficiente de linha de comando, de código aberto, livre de qualquer taxa, disponível no Linux e no Windows: simplesmente nomeado pdftotext. Essa ferramenta faz parte da biblioteca xpdf.
http://en.wikipedia.org/wiki/Pdftotext
fonte
-layout
opção para preservar tabelas, funciona muito bem.Para python, há PDFMiner e pyPDF2 . Para obter mais informações, consulte o módulo Python para converter PDF em texto .
fonte
Aqui está minha sugestão. Se você deseja extrair texto do PDF, importe o arquivo pdf para o Google Docs e exporte-o para um formato mais amigável, como .html, .odf, .rtf, .txt etc. Tudo isso usando a API do Google Drive . É gratuito * e robusto. Dê uma olhada em:
https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get
Por ser uma API de descanso, é compatível com TODAS as linguagens de programação. Os links que eu publiquei acima têm exemplos úteis para muitas linguagens, incluindo: Java, .NET, Python, PHP, Ruby e outros.
Espero que ajude.
fonte
O PDFTextStream (que você disse estar vendo) agora é gratuito para aplicativos de thread único. Na minha opinião, sua qualidade é muito melhor do que outras bibliotecas (especialmente para coisas como fontes incorporadas funky, etc.).
Como alternativa, você deve dar uma olhada no Apache PDFBox , de código aberto.
fonte
A biblioteca Docotic.Pdf pode ser usada para extrair texto de arquivos PDF como texto sem formatação ou como uma coleção de blocos de texto com coordenadas para cada bloco.
O Docotic.Pdf também pode ser usado para extrair imagens de PDFs .
Disclaimer: Eu trabalho para o Bit Miracle.
fonte
Um dos comentários aqui usou gs no Windows. Também tive algum sucesso com isso no Linux / OSX, com a seguinte sintaxe:
Eu usei em
dSIMPLE
vez dedCOMPLEX
porque o último gera 1 caractere por linha.fonte
Como a pergunta é especificamente sobre ferramentas alternativas para obter dados de PDF como XML , você pode estar interessado em dar uma olhada na ferramenta comercial "ByteScout PDF Extractor SDK" que é capaz de fazer exatamente isso: extrair texto de PDF como XML junto com os dados de posicionamento (x, y) e as informações da fonte:
Texto no PDF de origem:
XML de saída:
PS: além disso, também divide o texto em uma estrutura baseada em tabela.
Divulgação: Trabalho para o ByteScout
fonte
A melhor coisa que posso pensar atualmente (na lista de ferramentas "simples") é o Ghostscript (a versão atual é a v.8.71) e o programa utilitário PostScript
ps2ascii.ps
. O Ghostscript o envia em seulib
subdiretório. Tente isto (no Windows):Este comando processa as páginas 3-7 de
input.pdf
. Leia os comentários nops2ascii.ps
próprio arquivo para ver o que significam os números "estranhos" e informações adicionais ( eles indicam seqüências de caracteres, posições, larguras, cores, figuras, retângulos, fontes e quebras de página ... ). Para obter uma saída de texto "simples", substitua a-dCOMPLEX
peça por-dSIMPLE
.fonte
ps2ascii book.pdf notes.txt
. Se o seu documento é predominantemente ASCII, você está com sorte.Eu sei que esse tópico é bastante antigo, mas essa necessidade ainda está viva. Leio muitos documentos, fórum e script e construo um novo e avançado que suporta pdf compactado e descompactado:
https://gist.github.com/smalot/6183152
Em alguns casos, a linha de comando é proibida por razões de segurança. Portanto, uma classe PHP nativa pode atender a muitas necessidades.
Espero que ajude todos
fonte
Para extração de imagens, o pdfimages é uma ferramenta de linha de comando gratuita para Linux ou Windows (win32):
pdfimages: Extrair e salvar imagens de um arquivo PDF (Portable Document Format)
fonte
O Apache pdfbox possui esse recurso - a parte do texto é descrita em:
http://pdfbox.apache.org/apidocs/org/apache/pdfbox/util/PDFTextStripper.html
para obter um exemplo de implementação, consulte https://github.com/WolfgangFahl/pdfindexer
o testcase TestPdfIndexer.testExtracting mostra como funciona
fonte
O QuickPDF parece ser uma biblioteca razoável que deve fazer o que você deseja por um preço razoável.
http://www.quickpdflibrary.com/ - Eles têm uma avaliação de 30 dias.
fonte
Nos meus sistemas Macintosh, acho que o "Adobe Reader" faz um trabalho razoavelmente bom. Criei um alias na área de trabalho que aponta para o "Adobe Reader.app" e tudo o que faço é soltar um arquivo pdf no alias, o que o torna o documento ativo no Adobe Reader e, em seguida, no menu Arquivo, Escolha "Salvar como texto ...", atribua um nome e onde salvá-lo, clique em "Salvar" e pronto.
fonte