PDFBox - 如何创建目录 [英] PDFBox - how to create table of contents
问题描述
有没有办法使用 Java PDFBox
库创建目录?
Is there a way to create a table of contents using Java PDFBox
library?
目录应该是可点击的(跳转到正确的页面)
The table of contents should be clickable (jump to the right page)
谢谢.
推荐答案
没有简单的方法可以做到这一点,但这里有一个方法.我还没有弄清楚如何将链接直接附加到文本,所以我的方法意味着您必须将注释分别绘制为矩形和文本.边缘有点粗糙,但很管用.
There's no simple method for doing this, but here's an approach. I haven't figured out how to attach links directly to text, so my approach means you have to draw the annotations as rectangles and the text separately. It's a bit rough around the edges, but it works.
// 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();
呸!这是一个很多代码.那应该会让你上路.如果您希望矩形看起来就像他们只是点击了一个链接,您可以将矩形设置为与文档背景相同的颜色,但这需要更多的实验.
Phew! That's a lotta code. That should get you on your way. You can make the rectangle the same color as your document background if you want it to look like they are just clicking a link, but that requires more experimentation.
这篇关于PDFBox - 如何创建目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!