2017-10-09 5 views
0

Je tente d'effectuer une validation de chaîne sur des pages PDF individuelles dans un fichier via l'utilisation d'Apache PDFBox. Je vais utiliser PDFTextStripper pour la majorité de cette opération, donc mon premier problème à résoudre a été le fait que tous les PDF que je vais valider sont générés en 2up; par exemple Page 1 sur 2 et page 2 sur 2 étaient sur la même page ou si vous imaginez que vous avez littéralement scanné un livre face vers le bas dans un scanner - En plus de cela, ils étaient orientés incorrectement, et nécessitaient une rotation de 90 degrés afin que PDFTextStripper puisse les lire correctement. En utilisant les éléments des questions/solutions ci-dessous, j'ai construit une méthode qui coupe d'abord exactement la page en deux, exporte les pages recadrées dans un nouveau fichier, fait pivoter chaque page à la bonne orientation puis enregistre le fichier ;PDFBox - 2.0.3 - PDFTextStripper ramasser de l'ancien texte de la page avant le recadrage/rotation

Rotate PDF around its center using PDFBox in java

Split a PDF page in two parts [duplicate]

Visuellement, ma méthode travaille apparemment comme prévu jusqu'à ce que je lance PDFTextStripper contre - Il semble renvoyer le texte de pas seulement la page que je veux, mais aussi la page i recadré de celui-ci. Pour confirmer le problème, j'ai extrait une seule page de tout le document et l'ai enregistrée comme un nouveau fichier - lorsque j'exécute PDFTextStripper, j'obtiens toujours les mêmes résultats même si tout ce que je peux voir est littéralement une page. La recherche sur Adobe n'indique pas non plus les données anciennes et cachées.

Je ne peux que supposer que pendant ma méthode de transformation, j'ai besoin de redéfinir la page recadrée avec seulement le contenu de la page recadrée.

Ma question est, comment puis-je faire cela?

ps - je n'ai pas affiché mon code tel qu'il est en fait une fusion des solutions fournies dans les liens ci-dessus ci-dessus - si ce que je avais besoin, je peux fournir

Répondre

1

Le PDFTextStripper ne tient pas compte de la CropBox vous définissez recadrer les pages. Il ignore également si le texte est couvert par un rectangle ou une image rempli ou si le texte est invisible, il extrait tout le texte (à l'exception du texte dans les motifs ou contient des caractères de police de type 3).

Vous pouvez essayer le PDFTextStripperByArea à la place. Cette classe (dérivée de PDFTextStripper) se limite aux régions que vous pouvez définir.

(Malheureusement, ces régions doivent être définies à l'aide d'un système de coordonnées différent de celui utilisé pour la CropBox, donc en général, vous devrez transformer les coordonnées en premier.)

+0

Merci MKL, j'essayé et il a effectivement résolu mon problème. –