C# 删除某些页面后,书签与错误页面关联
我使用了iTextSharp开源库 我尝试了PdfWriter和PdfStamper: 对于PdfStamper,我有以下代码(代码执行后,ToDeletePageNumber将为“,!4,!5”): 或者,对于PdfWriter,我使用下面的代码(w是PdfWriter): 在这两种情况下,书签最初指向第6页,但在新生成的pdf文件中仍然指向第6页,这是错误的,因为第4页和第5页已被删除,原始第6页应为新文档中的第4页 我们有没有办法不用手动改变页码就能保存书签?我们有很多现有的书签,只需要删除两个页面,这似乎是一个简单的操作额外的工作C# 删除某些页面后,书签与错误页面关联,c#,itext,C#,Itext,我使用了iTextSharp开源库 我尝试了PdfWriter和PdfStamper: 对于PdfStamper,我有以下代码(代码执行后,ToDeletePageNumber将为“,!4,!5”): 或者,对于PdfWriter,我使用下面的代码(w是PdfWriter): 在这两种情况下,书签最初指向第6页,但在新生成的pdf文件中仍然指向第6页,这是错误的,因为第4页和第5页已被删除,原始第6页应为新文档中的第4页 我们有没有办法不用手动改变页码就能保存书签?我们有很多现有的书签,只需要删
非常感谢。在iText7(Java和.Net)中,您可以使用PdfMerger复制除要删除的页面之外的所有页面,书签将被更新。我必须看看iText5是否包含类似的功能。@SamuelHuylebroeck感谢您提供的信息,我搜索到iText5中没有pdfMerger,只有iText7,不幸的是,我们公司的政策不允许我们使用iText7。我们只是手动更新了书签。你可以尝试在iText5中使用PdfCopy或PdfSmartCopy,但我认为它不会更新书签。是的,我也尝试过。是的,你必须手动完成。iText7通过保留Page2PageMap,将源文档中的旧页面链接到新页面,并在最后迭代书签,在将书签复制到新文档中时更新目标来实现这一点。
stamper.Outlines = bookmarks;
reader.SelectPages("1-" + reader.NumberOfPages + toDelegePageNumbers);
stamper.Outlines = bookmarks;
stamper.Close();
foreach (int page in pageToKeep)
{
doc.NewPage();
w.DirectContent.AddTemplate(w.GetImportedPage(reader, page), 0, 0);
}
w.Outlines = bookmarks;
doc.Close();