2011-09-28 5 views
6

Je suis en train de créer un programme Java pour lire les fichiers PDF cryptés et extraire le contenu du fichier page par page incluant le texte, les images et leurs positions (coordonnées x, y) le fichier. Maintenant j'utilise PDFBox à cet effet et je reçois le texte et les images. Mais je n'ai pas pu obtenir la position du texte et la position de l'image. De plus, certains fichiers PDF cryptés posent problème.Lire le texte et l'emplacement des images (coordonnées xy) en utilisant PDFBox

Répondre

2

Jetez un oeil à org.apache.pdfbox.examples.util.PrintTextLocations. Je l'ai beaucoup utilisé et il est très utile de faire des analyses sur la disposition des éléments et des limites dans les documents PDF. Il a également révélé des éléments imprimés à l'encre blanche, ou en dehors de la zone imprimable (vraisemblablement des filigranes de documents, ou des éléments «oubliés» poussés hors de vue par l'auteur).

Exemple d'utilisation:

java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt 

Vous obtiendrez quelque chose comme ça:

Processing page: 0 
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A 
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f 
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e 
... 

que vous pouvez facilement analyser et utiliser pour tracer la position de l'élément, le cadre limite, et le « flux » (trajectoire à travers tous les éléments), etc. pour chaque page. Comme je suis sûr que vous êtes déjà au courant, vous trouverez que PDF peut être presque impossible à convertir en texte. C'est vraiment juste un format de description graphique (c'est-à-dire pour l'imprimante ou l'écran), pas un langage de balisage. Vous pouvez facilement faire un PDF qui imprime "Hello world", mais qui saute aléatoirement à travers les positions de caractères (et qui utilise des glyphes différents que n'importe quel encodage char, si vous le souhaitez), rendant le PDF très difficile à convertir en texte. Il n'y a pas de notion de "mot" ou de "paragraphe". Un document à deux colonnes, par exemple, peut être un cauchemar à analyser dans un texte.

Pour la deuxième partie de votre question, j'ai eu de bons résultats en utilisant la version xpdf 3,02, après la fixation Xref.cc (faire XRef::okToPrint(), XRef::okToChange(), XRef::okToCopy() et XRef::okToAddNotes() retourner tous gTrue). C'est pour manipuler des documents verrouillés, pas cryptés (il y a d'autres utils pour ça).

Questions connexes