itext 7不导入大纲/书签

时间:2017-07-04 14:16:15

标签: c# pdf itext7

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

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

由于RUPS可以读取和理解大纲树,是否有一个允许itext 7导入这些书签的设置?

我正在使用itext社区进行c#。

1 个答案:

答案 0 :(得分:0)

使用PdfMerger类可以在合并(和标记结构)时保留书签:

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#版本,方法是相同的,只有名称大写。