在屏幕截图中,您可以看到自定义页码标签(i,ii,iii,vii)。
如何使用PDFBox 2.0保存带有自定义页码标签的书签?
我的代码实际上看起来像这样:
PDDocumentOutline documentOutline = new PDDocumentOutline();
document.getDocumentCatalog().setDocumentOutline(documentOutline);
PDOutlineItem outline = new PDOutlineItem();
outline.setTitle(toc.getName());
documentOutline.addLast(outline);
addToc(toc, outline);
outline.openNode();
documentOutline.openNode();
private void addToc(Toc toc, PDOutlineItem outlineItem) {
PDPageFitWidthDestination destination = new PDPageFitWidthDestination();
PDPage page = document.getPage(toc.getPageNumber() - 1);
destination.setPage(page);
PDOutlineItem bookmark = new PDOutlineItem();
bookmark.setDestination(destination);
bookmark.setTitle(toc.getName());
outlineItem.addLast(bookmark);
if (toc.getChildren() != null) {
for (Toc subToc : toc.getChildren()) {
addToc(subToc, bookmark);
}
}
}
答案 0 :(得分:0)
您只能标记页面,不能标记书签。在下面的示例中(有3个空页面),罗马数字从3开始,然后十进制从1开始。罗马的前缀是“ RO”。因此页面是“ RO III”,“ RO IV”,“ 1”。
PDDocument doc = new PDDocument();
doc.addPage(new PDPage());
doc.addPage(new PDPage());
doc.addPage(new PDPage());
PDPageLabels pageLabels = new PDPageLabels(doc);
PDPageLabelRange pageLabelRange1 = new PDPageLabelRange();
pageLabelRange1.setPrefix("RO ");
pageLabelRange1.setStart(3);
pageLabelRange1.setStyle(PDPageLabelRange.STYLE_ROMAN_UPPER);
pageLabels.setLabelItem(0, pageLabelRange1);
PDPageLabelRange pageLabelRange2 = new PDPageLabelRange();
pageLabelRange2.setStart(1);
pageLabelRange2.setStyle(PDPageLabelRange.STYLE_DECIMAL);
pageLabels.setLabelItem(2, pageLabelRange2);
doc.getDocumentCatalog().setPageLabels(pageLabels);
doc.save("labels.pdf");
doc.close();