2016-10-03 1 views
0

J'ai http://laws-lois.justice.gc.ca/PDF/A-8.8.pdf que j'essaye d'analyser en utilisant PDFBox qui a 2 colonnes. Je veux que le texte soit analysé de sorte que les colonnes soient séparées, cependant quand je l'exécute à travers PDFBox il ne sépare pas les 2 colonnes, plutôt il concatène des lignes des deux colonnes ensemble.PDFBox 2 Colonne Problème Comment vérifier les billes

J'ai lu https://issues.apache.org/jira/browse/PDFBOX-448 qui dit que certains PDF n'ont pas d'article/perles qui peuvent être utilisés et donc l'analyse sera toujours fausse. J'ai essayé d'utiliser stripper.setShouldSeparateByBeads(true)

Comment puis-je vérifier si elle a des perles ou pas? Je n'ai trouvé aucun matériel de lecture concernant ce concept, sauf pour des questions sur l'analyse des colonnes de PDFBox.

Répondre

1

Vous pouvez vérifier si les billes sont dans une page avec PDPage.getThreadBeads(). Cela retournera une liste vide s'il n'y a pas de perles de fil.

Alerte spoiler: votre document n'en a pas.

Un exemple sur la façon de les utiliser peut être trouvé dans l'exemple DrawPrintTextLocations.java dans le téléchargement du code source. Des exemples de fichiers PDF avec des perles peuvent être trouvés dans les fichiers PDFBOX-3110-003422-p1-beads.pdf et PDFBOX-3110-poems-beads.pdf, également dans le téléchargement du code source.

Astuce supplémentaire: jetez un oeil à l'exemple ExtractTextByArea.java, cela devrait vous aider à extraire votre fichier PDF.

+0

Merci, cela a fonctionné pour moi. J'ai également trouvé que writeString de PDFParser peut être écrasé, et dans la fonction les colonnes sont lues comme deux ensembles de texte. Je pourrais enregistrer le texte que j'obtiens là manuellement et cela fonctionnerait quelque peu semblable à employer PDFTextStripperByArea. Que penses-tu de ce chemin? Je me demande s'il y a un inconvénient évident (le texte pourrait être divisé quand il ne devrait pas être?). – kyl

+0

Je suppose que vous voulez dire PDFStripper, pas PDFParser. Oui vous pouvez le faire ... la séquence des textes dépend du PDF, c'est-à-dire qu'elle n'a pas de "logique", c'est à dire de gauche à droite, ordonnée par colonnes ou autre, ça pourrait être n'importe quoi, alors attention que vos hypothèses fonctionnent. Si j'étais vous, je resterais avec PDFTextStripperByArea tant que le travail serait fait. –

+0

Merci pour votre aide! La plupart du temps, je voulais être capable de détecter automatiquement si ses 2 ou 3 colonnes, c'est pourquoi writeString() serait plus utile que de définir manuellement des limites de rectangles. – kyl