我正在尝试将PDF合并在一起并保留原始书签。我正在使用此处描述的方法: Merging documents with bookmarks但是,并非所有书签都已导入。也就是说,某些文件的书签是导入的,但不是从其他文件导入的。
使用RUPS(tool that can help you debug PDFs)看起来问题是大纲对象的对象编号。在有效的文件中,大纲树是对象10,在不起作用的文件中,大纲树是对象16 0.或者它可能与导入文件中页面树的对象顺序有关,大纲树出现在页面树之前。在不起作用的文件中,页面树首先出现。
由于RUPS可以读取和理解大纲树,是否有一个允许itext 7导入这些书签的设置?
我正在使用itext社区进行c#。
答案 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#版本,方法是相同的,只有名称大写。