複数のテーブルを含む PDF を作成しています。それらのいくつかは通常よりも幅が広いので、テーブル全体を快適に見るために、いくつかのページを回転させる (横向きにする) 必要があります。
問題は、ドキュメントを横向きに回転すると、その時点から生成されたブックマークが (多かれ少なかれ) 1 ページ遅れることです。正確には 1 ページではなく、不均衡がありますが、ブックマークを 1 ページ戻すことで回避できました。
最初に、文書を書いている間に文書を回転させようとしました。次に、両方の文章 (縦と横) を別々のドキュメントに開き、ブックマークを付けて 1 つの最終的なドキュメントにマージしようとしました。(悪い)結果はどちらの場合も同じです。
ここに私が使用するコードがあります:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ByteArrayOutputStream baosLandscape = new ByteArrayOutputStream();
ByteArrayOutputStream baosTotal = new ByteArrayOutputStream();
PdfCopyFields copier = new PdfCopyFields(baosTotal);
copier.setViewerPreferences(PdfWriter.PageModeUseOutlines);
Document document = new Document(PageSize.A4, 72, 48, 48, 24);
PdfWriter writer = PdfWriter.getInstance(document, baos);
writer.setViewerPreferences(PdfWriter.PageModeUseOutlines);
document.open();
// WRITE MY TABLES IN PORTRAIT
document.close();
Document documentLandscape = new Document(PageSize.A4.rotate(), 48, 65, 71, 48);
PdfWriter writerLandscape = PdfWriter.getInstance(documentLandscape, baosLandscape);
documentLandscape.open();
// WRITE MY TABLES IN LANDSCAPE
documentLandscape.close();
PdfReader reader = new PdfReader(baos.toByteArray());
List bookmarks = SimpleBookmark.getBookmark(reader);
copier.addDocument(reader);
PdfReader readerLandscape = new PdfReader(baosLandscape.toByteArray());
List bookmarksLandscape = SimpleBookmark.getBookmark(readerLandscape);
copier.addDocument(readerLandscape);
// HERE IT IS WHERE I CORRECT THE DELAY FOR THE LANDSCAPE BOOKMARKS
SimpleBookmark.shiftPageNumbers(bookmarksLandscape, reader.getNumberOfPages()-1, null);
bookmarks.addAll(bookmarksLandscape);
copier.setOutlines(bookmarks);
copier.close();
return baosTotal;
しかし、前に述べたように、これは正確に 1 つのページではなく、結局、ブックマークは私が望むほど正確ではありません。
以前にこの問題に直面した人はいますか? そのための解決策はありますか?それとも私は何か間違ったことをしていますか?
前もって感謝します!
PS: 章とセクション (セクションごとにブックマークが生成されます) を作成してブックマークを生成し、最後に章をドキュメントに追加することを忘れていました。
Paragraph titulo = new Paragraph("TITLE", myTitleFont);
titulo.setSpacingAfter(20f);
Chapter chapter = new Chapter(titulo, 5);
chapter.setNumberDepth(0);
Section section = null;
for(int i = 0; i < MAX; i++){
Paragraph tableName = new Paragraph("Table " + i, myFont);
section = chapter.addSection(10f, tableName, i);
section.setNumberDepth(0);
// GENERATE eventsTable
eventsTable.setSpacingBefore(10f);
eventsTable.setSpacingAfter(20f);
section.add(eventsTable);
section.newPage();
section.setComplete(true);
}
chapter.setComplete(true);
document.add(chapter);