itext 7 不导入大纲/书签

itext 7 not importing outline / bookmarks

我正在尝试将 PDF 合并在一起并保留原始书签。我正在使用此处描述的方法: Merging documents with bookmarks 但是,并非所有书签都已导入。也就是说,导入了一些文件的书签,但没有导入其他文件的书签。

使用 RUPS (tool that can help you debug PDFs) 看起来问题出在大纲对象的对象编号上。在有效的文件中,大纲树是对象1 0,在无效的文件中,大纲树是对象16 0。或者可能与导入文件中页面树的对象顺序有关,大纲树出现在页面树之前。在不起作用的文件中,页面树在前。

既然RUPS可以阅读和理解大纲树,有没有设置可以让itext 7导入这些书签?

我正在为 c# 使用 itext 社区。

使用 PdfMerger class:

可以在合并(和标签结构)时保留书签
public void createPdf(List<String> srcs, String dest) throws IOException, IOException {
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdfDoc = new PdfDocument(writer);
    pdfDoc.initializeOutlines();//Make sure the target document has outlines to merge into
    boolean mergeTags = true;
    boolean mergeOutlines = true; //Outlines are bookmarks, it is the named used for them in the spec.
    PdfMerger merger = new PdfMerger(pdfDoc, mergeTags,mergeOutlines);//THis is also equal to new PdfMerger(pdfDoc)
    for (String src : srcs) {
        PdfReader reader = new PdfReader(src);
        PdfDocument from = new PdfDocument(reader);
        merger.merge(from, 1, from.getNumberOfPages());
        from.close();
    }
    merger.close();
}

这适用于 7.0.3 及更高版本。 C#版本,方法相同,只是名字大写。