PDFBox - 如何创建目录

Mos*_*e.z 5 java pdfbox

有没有办法使用Java PDFBox库创建目录?

目录应该是可点击的(跳转到正确的页面)

谢谢。

tha*_*vik 0

没有简单的方法可以做到这一点,但这里有一个方法。我还没有弄清楚如何将链接直接附加到文本,所以我的方法意味着您必须将注释分别绘制为矩形和文本。它的边缘有点粗糙,但它确实有效。

// there are other types of destinations, choose what is appropriate
PDPageXYZDestination dest = new PDPageXYZDestination();
// the indexing is odd here.  if you are doing this on the first page of the pdf
// that page is -1, the next is 0, the next is 1 and so on.  odd.
dest.setPageNumber(3);
dest.setLeft(0);
dest.setTop(0); // link to top of page, this is the XYZ part

PDActionGoTo action = new PDActionGoTo();
action.setDestination(dest);

PDAnnotationLink link = new PDAnnotationLink();
link.setAction(action);
link.setDestination(dest);

PDRectangle rect = new PDRectangle();
// just making these x,y coords up for sample
rect.setLowerLeftX(72);
rect.setLowerLeftY(600);
rect.setUpperRightX(144);
rect.setUpperRightY(620);

PDPage page = // however you are getting your table of contents page, eg new PDPage() or doc.getDocumentCatalog().getAllPages().get(0)

page.getAnnotations().add(link);

PDPageContentStream stream = new PDPageContentStream(doc, page, true, true);
stream.beginText();
stream.setTextTranslation(85, 600); // made these up, have to test to see if padding is correct
stream.drawString("Page 1");
stream.endText();
stream.close();
Run Code Online (Sandbox Code Playgroud)

唷!这是一个很多代码。这应该能让你上路。如果您希望矩形看起来像他们只是单击链接,则可以将矩形设置为与文档背景相同的颜色,但这需要更多实验。