Frage

Ich mag einig (Java) Code schreiben, ein PDF-Dokument nimmt, und erstellt aus allen Lesezeichen genannte Ziele. Ich denke, die iText API ist der einfachste Weg, dies zu tun, aber ich habe noch nie zuvor in der API verwendet.

Wie würden Sie gehen über diese Art von Code mit der iText API zu schreiben? Kann iText das Parsen tun muß, selbst bestehenden PDFs manipulieren? Die Art von Manipulationen die ich denke, ist:

  • Öffnen
  • Suchen Lesezeichen,
  • Erstellen Sie Ziele,
  • Speichern
  • Schließen.

Oder gibt es eine andere API, die besser wäre?

War es hilfreich?

Lösung

Ich werde Sie warnen, nur vorne, dass Sie mit diesem enttäuscht werden. iText ist nicht wirklich gedacht als Parser verwendet werden. Es ist wirklich mehr für die Erstellung von ganz neue PDF-Dokumente, aber Sie können einen Schlag auf sie nehmen.

zu starten, mit iText, werden Sie nicht in der Lage sein, das vorhandene PDF-Dokument zu ändern. Was Sie können zu tun, obwohl, ist eine Kopie mit den zusätzlichen Funktionen, die Sie wollen. (Falls jemand anderes besser weiß, Sie lassen Sie mich wissen, das macht mich verrückt.)

Was wollen Sie tun, ist ein PdfReader Objekt von einem Eingangsstrom auf der Quelldatei erstellen. Dann erstellen Sie ein PdfCopy Objekt (die nur eine erweiterte PDFWriter ist, das Abrufen von Daten aus einer bestehenden Quelle bequemer macht) zum Ziel.

Soweit ich sagen kann, können die Lesezeichen nicht von iText überhaupt erhalten werden. Eine weitere Bibliothek benötigt werden. Ich denke, jpedal kann die Fähigkeit haben, um sie zu extrahieren (es sie als XML erhalten können Dokument, das Sie können dann analysieren müssen, um zu bekommen, was Sie wollen.) aber Sie sie erhalten haben, können Sie fügen Sie sie zu einem java.util.List, und legen Sie diese Liste als Umriss auf der PDFCopy. Die Lesezeichen selbst sind HashMaps nur mit einem bestimmten Satz von Schlüsseln. Ich bin mir nicht sicher, was alle Werte sind, aber sie sind „Titel“, „Aktion“ (was zu sein scheint, man würde angeben, dass dies ein benanntes Ziel ist, obwohl ich weiß nicht, was dieser Wert wäre ) und „URI“ (der verwendet wird, wenn dies ein externer Link - ich vermute, dass dies den Namen des benannten Bestimmungsort angeben würde, dass Sie die Verknüpfung zu). Auch hier sind die Besonderheiten schwer zu finden.

Dann iterieren über die Seiten des Lesers, um jede Seite auf die PdfCopy importieren. diese Seite helfen können.

Sorry, ich bin nicht mehr für Sie hilfreich. Viel Glück.

P. S. Wenn jemand anderes ein besseres Werkzeug kennt, die entweder ist (L) GPL oder BSD lizenziert, würde ich gerne davon hören.

Andere Tipps

Followup: legte ich einen Patch iText vor ein paar Monaten (es jetzt angenommen wurde und Teil von HEAD ist), die Textanalyse-Funktionen iText hinzufügt. PDFBox (unten erwähnt) hat (hatte?) Probleme mit neueren PDFs lesen, die xref-Streams verwenden anstelle des älteren xref Tabellenformat.


Eine andere Bibliothek, die ist sehr gut Parsen vorhandenen PDF-Dateien ist PDFBox es kann auch zum Bearbeiten eines vorhandenen PDF verwendet werden. FYI -. Dies ist der Text-Parser, die Lucene verwendet

Ich werde auch erwähnen, dass iText hat haben die Möglichkeit, eine PDF-Datei zu analysieren, es ist nur nicht so toll an auf jeder Seite den Textinhalt Parsen. Wenn Sie schauen, um die PDF höheren Ebene Konstrukte bei Zugriff (Wörterbücher, etc ...), die zum Speichern von Lesezeichen verwendet werden, etc ... und es Ihnen nichts ausmacht Ihre Hände ein wenig schmutzig zu machen, die PDF-Spezifikation mit lesen, können Sie absolut tun, was über Sie fragen (wir es ziemlich viel tun, um sie).

Das PDF Spec groß, aber lesbar zum größten Teil, und Sie müssen sich nicht um die Masse davon kümmern (die auf tatsächlichen Inhalt der Seite und Rendering ausgerichtet ist), wenn alles, was Sie versuchen zu tun Extrakt Lesezeichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top