1
を高めていると私は状況を次のようしている:私は、Apache FOPで生成されたPDFファイルが既に存在PDFBOXは、私はJavaプロジェクトに取り組んでいる二回
。
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(); }
私はPDFBOX 2.0.0で(再生成FOP)は、第2のファイルを開くと、テキストの特定の部分に3 PDAnnotationLinksを追加しています:インサイド私は取得していますブックマークは、そこにあります。このファイルは、図がほとんどない単一ページです。それから私は、リンクが動作している、第二のファイルを保存した後
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);
}
ポイント1からアクションを追加しますが、ファイルサイズが2倍になります。 PDFバージョンは1.6です。ファイルにはすでにフィルタFlateDecodeがあります。 私はオンラインのPDFファイル比較(最初のファイルと結果ファイルとリンク)を試みましたが、結果はファイルに違いがないということです。 テキストエディタでファイルを開くと、 - 元のファイル - 1タイプ/ページ/インスタンス - 結果ファイル - 18 /タイプ/ページインスタンス 私の推測では、PDFBOXに追加の(重複した)情報が追加されていると思います。
この問題が発生した場合は、アドバイスをお願いします。
おかげ
明らかであると思います。他のファイルからページを参照しています。 "ページはページオブジェクトへの間接的な参照です" =>あなたのGotoアクションの行先が自分のドキュメントのページであることを確認する必要があります。ちょうど場合には、あなたは "2.0.0"と言いました、私はRC3ではなく、リリースされたバージョンだと思います。 –
こんにちはティルマン、はい、私は2.0.0のリリース版を使用していますが、問題はどこにありますか。あなたが正しく言ったように、Gotoのアクションは自分のドキュメントのページでなければならず、私は別のドキュメントからページを指しています...これを指摘してくれてありがとう。コードを書き直してPDFBOXの詳細を読む必要があります – micky
2番目のファイルには1ページしかないので、gotoアクションのPDPageDestinationのPDPageパラメータを割り当てるのは簡単です。 action.setDestination(page)。 –