1

複数のテーブルを含む 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);
4

1 に答える 1