PDFBox - How to Create a Table of Contents

Is there a way to create a table of contents using a library Java PDFBox?

The table of contents should be clickable (go to the right page)

Thank.

+4
source share
1 answer

There is no simple method for this, but there is an approach. I did not understand how to attach links directly to the text, so my approach means that you have to draw annotations as rectangles and text separately. It's a little 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! This is the lot code. This should help you. You can make the rectangle the same color as the background of your document, if you want it to look like they just click on a link, but this requires more experimentation.

0

Source: https://habr.com/ru/post/1539819/


All Articles