我正在构建一个包含多个表格的 PDF。其中一些比平时宽,所以我必须旋转几页(将它们横向放置)才能舒适地看到整个表格。
问题是:当我将文档旋转为横向时,从该点生成的书签会延迟(或多或少)一页。它不完全是一页,有一个不平衡的,但我已经能够通过将这些书签移回一页来解决它。
在大写的时候,我试图在文档写的时候旋转它。然后我尝试在单独的文档中打开两篇文章(纵向和横向),将它们合并到一个带有书签的最终文档中。在这两种情况下,(坏的)结果是相同的。
这是我使用的代码:
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;
但是,正如我之前提到的,它并不完全是一页,最后书签并不像我想要的那样精确。
你们中有人遇到过这个问题吗?有什么解决办法吗?还是我做错了什么?
提前致谢!
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);