Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除某些页面后,书签与错误页面关联_C#_Itext - Fatal编程技术网

C# 删除某些页面后,书签与错误页面关联

C# 删除某些页面后,书签与错误页面关联,c#,itext,C#,Itext,我使用了iTextSharp开源库 我尝试了PdfWriter和PdfStamper: 对于PdfStamper,我有以下代码(代码执行后,ToDeletePageNumber将为“,!4,!5”): 或者,对于PdfWriter,我使用下面的代码(w是PdfWriter): 在这两种情况下,书签最初指向第6页,但在新生成的pdf文件中仍然指向第6页,这是错误的,因为第4页和第5页已被删除,原始第6页应为新文档中的第4页 我们有没有办法不用手动改变页码就能保存书签?我们有很多现有的书签,只需要删

我使用了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();