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#版本,方法相同,只是名字大写。
我正在尝试将 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#版本,方法相同,只是名字大写。