Question

J'aimerais écrire du code (Java) qui prend un document PDF et crée des destinations nommées à partir de tous les signets. Je pense que l’API iText est le moyen le plus simple de le faire, mais je n’avais jamais utilisé l’API auparavant.

Comment voudriez-vous écrire ce genre de code avec l’API iText? IText peut-il effectuer l'analyse syntaxique nécessaire pour manipuler des fichiers PDF existants? Les manipulations auxquelles je pense sont les suivantes:

  • Ouvrir,
  • Rechercher des favoris,
  • Créer des destinations,
  • Enregistrer,
  • Fermer.

Ou y a-t-il une API différente qui conviendrait mieux?

Était-ce utile?

La solution

Je vais simplement vous prévenir dès le départ que cela pourrait vous décevoir. iText n'est pas vraiment destiné à être utilisé comme analyseur. C’est vraiment plus pour la création de entièrement nouveaux documents PDF, mais vous pouvez l’essayer.

Pour commencer, en utilisant iText, vous ne pourrez pas modifier le document PDF existant. Ce que vous pouvez faire, cependant, est de faire une copie avec les fonctionnalités supplémentaires souhaitées. (Si quelqu'un d'autre le sait mieux, s'il vous plaît , faites-moi savoir, cela me rend fou.)

Ce que vous voudrez faire, c'est créer un objet PdfReader à partir d'un flux d'entrée sur votre fichier source. Créez ensuite un objet PdfCopy (qui est simplement un fichier PdfWriter étendu permettant de récupérer plus facilement les données d’une source existante) pour votre destination.

Autant que je sache, les signets ne peuvent absolument pas être obtenus auprès d'iText. Une autre bibliothèque peut être nécessaire. Je pense que jpedal peut être en mesure de les extraire (il peut les obtenir sous forme de fichier XML). document, que vous devrez peut-être ensuite analyser pour obtenir ce que vous voulez.) Toutefois, vous pouvez les ajouter à un fichier java.util.List et définir cette liste comme aperçu sur PDFCopy. Les signets eux-mêmes ne sont que des HashMaps avec un ensemble de clés particulier. Je ne suis pas sûr de connaître toutes les valeurs, mais elles incluent "Titre", "Action". (ce qui semble être l'endroit où vous spécifieriez qu'il s'agit d'une destination nommée, bien que je ne sache pas quelle serait cette valeur), et "URI". (qui est utilisé s'il s'agit d'un lien externe - je suppose que cela spécifierait le nom de la destination nommée à laquelle vous vous connectez). Encore une fois, les détails sont difficiles à trouver.

Ensuite, parcourez les pages du lecteur, en important chaque page dans PdfCopy. cette page peut vous aider.

Désolé, je ne vous suis pas plus utile. Bonne chance.

P.S. Si quelqu'un d'autre connaît un meilleur outil sous licence (GPL) ou BSD, j'aimerais en entendre parler.

Autres conseils

Suivi: J'ai soumis un correctif à iText il y a quelques mois (celui-ci est maintenant accepté et fait partie de HEAD), qui ajoute des fonctionnalités d'analyse de texte à iText. PdfBox (mentionné ci-dessous) a eu (eu?) Des problèmes pour lire les nouveaux PDF qui utilisent des flux de xréf au lieu de l’ancien format de table de xref.

Une autre bibliothèque qui est très douée pour analyser les fichiers PDF existants, est PdfBox . Il peut également être utilisé pour modifier un PDF existant. FYI - C’est l’analyseur de texte que Lucene utilise.

Je mentionnerai également qu'iText a la possibilité d'analyser un fichier PDF. Ce n'est tout simplement pas idéal pour analyser le contenu textuel de chaque page. Si vous souhaitez accéder aux constructions PDF de niveau supérieur (dictionnaires, etc.) utilisées pour stocker les signets, etc., et que cela ne vous dérange pas de vous salir les mains en lisant les spécifications PDF, vous pouvez faites absolument ce que vous demandez (nous le faisons assez nous-mêmes).

La spécification PDF est volumineuse, mais lisible pour l’essentiel, et vous n'avez pas à vous soucier de l'essentiel (qui est orienté vers le contenu et le rendu de la page) si vous essayez uniquement d'extraire des signets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top