web-dev-qa-db-fra.com

Comment extraire du texte d'un PDF?

Quelqu'un peut-il recommander une bibliothèque/API pour extraire le texte et les images d'un fichier PDF? Nous devons être en mesure d’obtenir du texte contenu dans des régions pré-connues du document. L’API devra donc nous fournir des informations sur la position de chaque élément de la page.

Nous aimerions que ces données soient sorties au format xml ou json. Nous examinons actuellement PdfTextStream qui semble plutôt bon, mais aimerait entendre les expériences et les suggestions des autres peuples.

Existe-t-il des alternatives (commerciales ou gratuites) pour extraire le texte d'un fichier PDF par programme?

136
Budda007

On m'a donné un fichier pdf de 400 pages avec une table de données que je devais importer - heureusement aucune image. Ghostscript a fonctionné pour moi:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Le fichier de sortie a été divisé en pages avec en-têtes, etc., mais il était alors facile d'écrire une application pour effacer les lignes vides, etc., et aspirer les 30 000 enregistrements. -dSIMPLE et -dCOMPLEX ne font aucune différence dans ce cas.

97
user2176753

Depuis aujourd'hui, je le sais: la meilleure chose pour extraire du texte à partir de PDF est TET, le texte boîte à outils d'extraction . TET fait partie de la famille de produits PDFlib.com.

PDFlib.com est la société de Thomas Merz. Si vous ne reconnaissez pas son nom, Thomas Merz est l'auteur de "PostScript and PDF Bible".

La première incarnation de TET est une bibliothèque . Celui-ci peut probablement faire tout ce que Budda006 voulait, y compris des informations de position sur chaque élément de la page. Oh, et il peut aussi extraire des images. Il recombine des images fragmentées en morceaux.

pdflib.com propose également une autre incarnation de cette technologie, le plug-in TET pour Acrobat . Et la troisième incarnation est le PDFlib TET iFilter . Ceci est un outil autonome pour les bureaux des utilisateurs. Tous deux sont gratuits (comme dans la bière) à utiliser à des fins privées et non commerciales.

Et c'est vraiment puissant. Bien mieux que l'extraction de texte propre à Adobe. Cela m'a permis d'extraire du texte là où d'autres outils (y compris Adobe) ne crachent que des ordures.

Je viens de tester l'outil autonome de bureau, et ce qu'ils disent sur leur page Web est vrai. Il a une très bonne ligne de commande. Certains de mes "problèmes" PDF fichiers de test sont gérés avec la plus grande satisfaction.

C’est ce que je recommanderai désormais pour toutes les exigences sophistiquées et exigeantes en matière d’extraction de textePDF.

TET est tout simplement génial. Il détecte les tables. À l'intérieur des tables, il identifie les cellules couvrant plusieurs colonnes. Il identifie les lignes et le contenu de chaque cellule de tableau séparément. Il traite très bien les traits d'union: il supprime les traits d'union et restaure des mots complets. Il prend en charge les langues non-ASCII (y compris CJK, arabe et hébreu). Lors de la rencontre de ligatures, il restaure les caractères originaux ...

Essaie.

34
Kurt Pfeifle

Un outil de ligne de commande efficace, open source, gratuit, disponible sur linux et windows: simplement nommé pdftotext. Cet outil fait partie de la bibliothèque xpdf.

http://en.wikipedia.org/wiki/Pdftotext

27
131

Pour python, il existe PDFMiner et pyPDF2 . Pour plus d'informations à ce sujet, voir module Python permettant de convertir PDF en texte .

21
Jonathan

Voici ma suggestion. Si vous souhaitez extraire du texte d'un fichier PDF, vous pouvez importer le fichier pdf dans Google Documents, puis l'exporter dans un format plus convivial tel que .html, .odf, .rtf, .txt, etc. Tout cela à l'aide de l'API de lecteur. . C'est gratuit * et robuste. Jeter un coup d'œil à:

https://developers.google.com/drive/v2/reference/files/inserthttps://developers.google.com/drive/v2/reference/files/get

Comme il s'agit d'une API de repos, elle est compatible avec TOUS les langages de programmation. Les liens que j'ai affichés ci-dessus contiennent des exemples de travail pour de nombreuses langues, notamment: Java, .NET, Python, PHP, Ruby et d'autres.

J'espère que ça aide.

10
oabarca

(PdfTextStream (que vous dites avoir regardé) est maintenant libre pour les applications à un seul thread. À mon avis, sa qualité est bien meilleure que celle d’autres bibliothèques (en particulier pour des choses comme les polices incorporées géniales, etc.).

Alternativement, vous devriez jeter un oeil à Apache PDFBox , open source.

9
Renaud

L'un des commentaires ici utilisé gs sur Windows. J'ai également eu quelques succès avec Linux/OSX, avec la syntaxe suivante:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

J'ai utilisé dSIMPLE au lieu de dCOMPLEX car ce dernier génère 1 caractère par ligne.

6
kvz

bibliothèque Docotic.Pdf peut être utilisé pour extraire un texte à partir de PDF des fichiers sous forme de texte brut ou sous forme de collection de morceaux de texte avec les coordonnées de chaque morceau.

Docotic.Pdf peut être utilisé pour extraire des images de PDF , aussi.

Disclaimer: Je travaille pour Bit Miracle.

6
Bobrovsky

Comme la question concerne spécifiquement les outils alternatifs permettant d’obtenir des données à partir de PDF au format XML , vous serez donc peut-être intéressé à jeter un coup d’œil sur l’outil commercial "ByteScout PDF Extractor SDK" capable de faire exactement cela: extraire le texte de PDF en tant que XML avec les données de positionnement (x, y) et les informations relatives à la police:

Texte dans le fichier PDF source:

Products | Units | Price 

XML de sortie:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

P.S .: en outre, il divise également le texte en une structure basée sur des tableaux.

Divulgation: je travaille pour ByteScout

4
Eugene

Je sais que ce sujet est assez ancien, mais ce besoin est toujours d'actualité. J'ai lu de nombreux documents, forums et scripts et en ai créé un nouveau qui prend en charge les fichiers PDF compressés et non compressés:

https://Gist.github.com/smalot/6183152

Dans certains cas, la ligne de commande est interdite pour des raisons de sécurité. Ainsi, une classe native PHP peut répondre à de nombreux besoins.

J'espère que ça aide tout le monde

3
Sebastien Malot

La meilleure chose à laquelle je puisse penser actuellement (dans la liste des outils "simples") est Ghostscript (la version actuelle est la v.8.71) et le programme d’utilitaire PostScript ps2ascii.ps. Ghostscript le fournit dans son sous-répertoire lib. Essayez ceci (sous Windows):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

Cette commande traite les pages 3 à 7 de input.pdf. Lisez les commentaires dans le fichier ps2ascii.ps pour voir ce que signifient les "chiffres étranges" et les informations supplémentaires (ils indiquent les chaînes, les positions, les largeurs, les couleurs, les images, les rectangles, les polices et les sauts de page ...). Pour obtenir une sortie texte "simple", remplacez la partie -dCOMPLEX par -dSIMPLE.

2
Kurt Pfeifle

Pour l'extraction d'images, pdfimages est un outil de ligne de commande gratuit pour Linux ou Windows (win32):

pdfimages: Extraire et enregistrer des images à partir d'un format de document portable (fichier PDF)

2
Sun

Apache pdfbox a cette fonctionnalité - la partie texte est décrite dans:

http://pdfbox.Apache.org/apidocs/org/Apache/pdfbox/util/PDFTextStripper.html

pour un exemple de mise en œuvre, voir https://github.com/WolfgangFahl/pdfindexer

le testcase TestPdfIndexer.testExtracting montre comment cela fonctionne

2
Wolfgang Fahl

QuickPDF semble être une bibliothèque raisonnable qui devrait faire ce que vous voulez pour un prix raisonnable.

http://www.quickpdflibrary.com/ - Ils ont un essai de 30 jours.

1
Andrew Cash

Sur mes systèmes Macintosh, je trouve que "Adobe Reader" fait un assez bon travail. J'ai créé un alias sur mon bureau qui pointe vers "Adobe Reader.app". Tout ce que je fais est de déposer un fichier pdf sur l'alias, ce qui en fait le document actif dans Adobe Reader, puis dans le menu Fichier. Je choisis "Enregistrer en tant que texte ...", lui donne un nom et où l'enregistrer, cliquez sur "Enregistrer", et j'ai terminé.

0
Dick Guertin