使用 PDFBOX 将顶级书签添加到现有 PDF

Adding Top level Bookmark to the exsting PDF using PDFBOX

我想在 JAVA 中使用 PDFBOX 将顶级书签添加到现有的 pdf 文件。

不知道为什么下面的代码不起作用,有人能帮我吗?谢谢。

下面是 Document.pdf 在书签部分的样子。

Top
---Node-1
-------Node-11
-------Node-12
....
---Node-2
-------Node-21
....

Java代码(程序内的部分):

PDDocument document = PDDocument.load(new File("C:/Users/Desktop/document.pdf")) 
    PDDocumentOutline documentOutline = new PDDocumentOutline();
    document.getDocumentCatalog().setDocumentOutline(documentOutline);
    PDOutlineItem pagesOutline = new PDOutlineItem();
    pagesOutline.setTitle("All Pages");
    documentOutline.addFirst(pagesOutline);

    pagesOutline.openNode();
    documentOutline.openNode();

    document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

    document.save("C:/Users/Desktop/document.pdf");

    document.close()

这是我的尝试,如果以后有人问我,我会保留我的文件名。

我所做的是将旧的大纲包装到一个新的项目中。现有的项目无法一一添加,因为只能添加"orphans"。

PDDocument document = PDDocument.load(new File("000009.pdf")); 
PDDocumentOutline oldDocumentOutline = document.getDocumentCatalog().getDocumentOutline();
PDDocumentOutline documentOutline = new PDDocumentOutline();
document.getDocumentCatalog().setDocumentOutline(documentOutline);
PDOutlineItem pagesOutline = new PDOutlineItem();
//pagesOutline.setTitle("All Pages");
//documentOutline.addFirst(pagesOutline);
PDOutlineItem oldOutlineItemWrapped = new PDOutlineItem(oldDocumentOutline.getCOSObject());
oldOutlineItemWrapped.setTitle("All Pages");
documentOutline.addFirst(oldOutlineItemWrapped);

//pagesOutline.openNode();
oldOutlineItemWrapped.openNode();
documentOutline.openNode();

document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

document.save("000009-modified.pdf");

document.close();