Ich arbeite an Java-Projekt hinzugefügt und ich habe folgende Situation:PDFBox nach PDAnnotationLinks Dateigröße wird zweimal erhöht
Ich habe PDF-Datei mit Apache FOP erzeugte bestehende. Im Inneren befinden sich Lesezeichen, die mit Ich erhalte:
Map<String, PDAction> actionsMap = new HashMap<String, PDAction>(); PDDocumentOutline bookmarks = doc1.getDocumentCatalog().getDocumentOutline(); PDOutlineItem item = bookmarks.getFirstChild(); while(item != null){ actionsMap.put(item.getTitle(), item.getAction()); item = item.getNextSibling(); }
Ich zweite Datei bin Öffnung (wieder erzeugt FOP) mit PDFBox 2.0.0 und 3 PDAnnotationLinks auf bestimmte Teile des Textes hinzuzufügen. Die Datei ist eine einzelne Seite mit wenigen Diagrammen. Dann füge ich die aus Punkt 1
PDPage page = (PDPage) diagramDocument.getDocumentCatalog().getPages().get(0); //objCoordinates is retrieved from another class with PDFTextStripper Iterator entries = objCoordinates.entrySet().iterator(); while (entries.hasNext()) { Entry entry = (Entry) entries.next(); String key = (String) entry.getKey(); PDAnnotationLink txtLink = new PDAnnotationLink(); PDBorderStyleDictionary borderULine = new PDBorderStyleDictionary(); borderULine.setWidth(0); txtLink.setBorderStyle(borderULine); PDActionGoTo action = (PDActionGoTo) actionsMap.get(key); txtLink.setAction(action); final float[] quads = (float[]) entry.getValue(); PDRectangle rect = new PDRectangle(); rect.setLowerLeftX(quads[0]); rect.setLowerLeftY(quads[5]); rect.setUpperRightX(quads[2]); rect.setUpperRightY(quads[1]); txtLink.setRectangle(rect); page.getAnnotations().add(txtLink); }
Nach der zweiten Datei zu speichern, die Links funktionieren, aber die Dateigröße verdoppelt wird. PDF-Version ist 1.6. Die Datei hat bereits den Filter FlateDecode. Ich habe online PDF-Dateien Vergleich (erste Datei und Ergebnisdatei mit Links) versucht, aber das Ergebnis ist, dass die Dateien keinen Unterschied haben. Wenn ich die Dateien mit dem Texteditor öffne, gibt es - Originaldatei - 1 Typ/Seite/Instanz - Ergebnisdatei - 18/Typ/Seiteninstanzen Ich schätze, dass PDFBOX zusätzliche (doppelte?) Informationen hinzufügt.
Wenn jemand auf dieses Problem gestoßen ist, würde ich mich über einen Ratschlag freuen.
Dank
es ohne die Datei schwierig ist, aber mein Gefühl ist, dass, wenn Sie PDActionGoTo action = (PDActionGoTo) actionsMap.get (Schlüssel) zu tun; Sie verweisen auf eine Seite aus der anderen Datei. "Seite ist ein indirekter Verweis auf ein Seitenobjekt" => Sie sollten sicherstellen, dass das Ziel Ihrer Goto-Aktion eine Seite Ihres eigenen Dokuments ist. BTW nur für den Fall, Sie erwähnten "2.0.0", ich hoffe, es ist die veröffentlichte Version und nicht RC3. –
Hi Tilman, Ja, ich benutze die Version 2.0.0, aber das Problem ist wo sonst. Wie Sie richtig sagten, sollte die Aktion "Gehe zu" eine Seite Ihres eigenen Dokuments sein und ich zeige auf die Seite aus einem anderen Dokument ... Danke, dass Sie darauf hingewiesen haben. Ich muss meinen Code überarbeiten und mehr über PDFBOX lesen – micky
Ihre zweite Datei hat nur eine Seite, daher sollte es einfach sein, den PDPage-Parameter des PDPageDestination der goto-Aktion zuzuweisen. action.setDestination (Seite). –