Erstellen Ziele für alle Lesezeichen in einer PDF-Datei mit der iText-API
Ich würde gerne ein paar schreiben (java -) code, der nimmt ein PDF-Dokument und erstellt benannte Ziele aus aller Lesezeichen. Ich denke, der iText-API ist der einfachste Weg, dies zu tun, aber ich habe noch nie verwendet die API vor.
Wie würden Sie gehen über das schreiben dieser Art von code mit der iText-API? Kann iText tun, die Analyse benötigt, um Bearbeiten von vorhandenen PDF-Dateien selbst? Die Art der Manipulationen, an die ich denke sind:
- Öffnen,
- Finden, Lesezeichen,
- Erstellen Ziele,
- Speichern,
- Schließen.
Oder gibt es eine andere API, die besser wäre?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich nur warnen, Sie von Anfang an, dass Sie enttäuscht werden können mit dieser. iText ist nicht wirklich beabsichtigt, als ein parser. Es ist wirklich mehr für die Erstellung völlig neue PDF-Dokumente, aber Sie können auf einen Schlag bei ihm.
Beginnen, mit iText, werden Sie nicht in der Lage, ändern Sie die vorhandenen PDF-Dokuments. Was Sie kann tun, obwohl, ist, um eine Kopie mit den zusätzlichen Funktionen, die Sie wollen. (Wenn jemand anderes besser weiß, bitte lassen Sie mich wissen, das treibt mich verrückt.)
Was Sie wollen, zu tun ist, erstellen Sie einen PdfReader Objekt aus einer Eingabe-stream auf Ihrem Quell-Datei. Dann erstellen Sie eine PdfCopy-Objekt (das ist nur eine erweiterte PdfWriter das macht das abrufen von Daten aus einer vorhandenen Quelle bequemer) für Ihr Reiseziel.
Soweit ich das beurteilen kann, die Lesezeichen nicht entnommen werden kann iText überhaupt. Eine andere Bibliothek gebraucht wird. Ich denke, jpedal kann die Fähigkeit haben, extrahieren Sie Sie (es kann zu bekommen, wie ein XML-Dokument, die Sie dann analysieren, um zu bekommen, was Sie wollen.) Allerdings erhalten Sie diese, können Sie fügen Sie dann zu java.util.Liste und legen Sie diese Liste als übersicht über die PDFCopy. Die Lesezeichen selbst sind nur HashMaps mit einem bestimmten Satz von Schlüsseln. Ich bin mir nicht sicher, was die Werte sind, aber Sie gehören "Titel", "Action" (das scheint zu sein, wobei Sie spezifizieren, dass dies ein benanntes Ziel, obwohl ich nicht weiß, was das Wert sein würde), und "URI" (der verwendet wird, wenn dies ist ein externer link -- ich vermute, dass dies geben Sie den Namen der benannten Ziel, das Sie verlinken). Wieder, die Besonderheiten sind schwer zu finden.
Dann Durchlaufen Sie die Seiten des Lesers, importieren Sie jede Seite, die PdfCopy. auf dieser Seite kann Ihnen dabei helfen.
Sorry, ich bin nicht mehr für Sie hilfreich. Viel Glück.
P. S. Wenn jemand anderes kennt ein besseres tool, dass entweder die (L)GPL oder BSD lizensiert, würde ich gerne davon zu hören.
Nachtrag: ich habe einen patch für iText vor ein paar Monaten (es wurde nun angenommen und ist Teil des KOPFES), fügt text-parsing-Fähigkeiten zu iText. PdfBox (unten erwähnt) hat (hatte?) Probleme mit Lesen von neueren PDF-Dateien, die Verwendung des xref-streams anstelle der älteren xref-table-format.
Anderen Bibliothek, die ist sehr gut analysieren bestehende PDF-Dateien ist PdfBox Es kann auch verwendet werden, für das ändern einer vorhandenen PDF-Datei. FYI - dies ist der text-parser, der die Lucene verwendet.
Werde ich auch erwähnen, dass iText hat haben die Fähigkeit zum analysieren einer PDF-Datei, es ist einfach nicht groß, bei der Analyse der text-Inhalte auf jeder Seite. Wenn Sie auf der Suche auf den Zugriff auf die PDF-höheren Ebene konstruiert werden (Wörterbücher, etc...), die verwendet werden, für die Speicherung von Lesezeichen, etc... und Sie nichts dagegen haben, bekommen Ihre Hände ein wenig schmutzig mit Lesen der PDF-spec kann man auf jeden Fall das tun, was Sie Fragen (wir tun es ganz ein bisschen selbst).
Den PDF-Spec ist groß, aber lesbar für die meisten Teil, und Sie müssen nicht sorgen zu machen über die Massen der es (was ist daran ausgerichtet, den eigentlichen Inhalt der Seite und rendering), wenn alles, was Sie versuchen zu tun ist, extrahieren Sie Lesezeichen.