C# 如何使用iText7覆盖PDF中的现有书签树

C# 如何使用iText7覆盖PDF中的现有书签树,c#,pdf,overwrite,itext7,bookmarks,C#,Pdf,Overwrite,Itext7,Bookmarks,我正在开发一个实用程序,它将tab递增文本文件作为输入,使用iText7在现有PDF文件中创建书签树(也称为大纲) 显然这不是真正的代码,但这基本上就是我构建树的方式: PdfReader reader = new PdfReader(srcFilePath); PdfWriter writer = new PdfWriter(targetFilePath); PdfDocument pdfDoc = new PdfDocument(reader, writer); PdfOutline ro

我正在开发一个实用程序,它将tab递增文本文件作为输入,使用iText7在现有PDF文件中创建书签树(也称为大纲)

显然这不是真正的代码,但这基本上就是我构建树的方式:

PdfReader reader = new PdfReader(srcFilePath);
PdfWriter writer = new PdfWriter(targetFilePath);
PdfDocument pdfDoc = new PdfDocument(reader, writer);

PdfOutline rootOutline = pdfDoc.GetOutlines(false);
PdfOutline mainTitleOutline;

(mainTitleOutline = rootOutline.AddOutline("Title 1")).AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(1)));
mainTitleOutline.AddOutline("Sub title 1.1").AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(2)));
mainTitleOutline.AddOutline("Sub title 1.2").AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(3)));

(mainTitleOutline = rootOutline.AddOutline("Title 2")).AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(4)));
mainTitleOutline.AddOutline("Sub title 2.1").AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(5)));
mainTitleOutline.AddOutline("Sub title 2.2").AddDestination(PdfExplicitDestination.CreateFit(pdfDoc.GetPage(6)));

pdfDoc.Close();
当PDF没有任何书签时,这非常有效,但是当有(
pdfDoc.GetOutlines(false).GetAllChildren().Count>0
)书签时,我希望在手之前删除整个树(因此覆盖它们),因为如果没有书签,我会将新的大纲添加到旧的大纲中


有没有办法做到这一点?

这段方便的API现在确实缺少了,但您仍然可以用一行代码在较低的级别上完成它:

 pdfDocument.GetCatalog().GetPdfObject().Remove(PdfName.Outlines);
只需确保在首次访问轮廓之前删除轮廓,即:

PdfReader reader = new PdfReader(srcFilePath);
PdfWriter writer = new PdfWriter(targetFilePath);
PdfDocument pdfDoc = new PdfDocument(reader, writer);

// Remove outlines before getting PdfOutline object by calling GetOutlines
pdfDocument.GetCatalog().GetPdfObject().Remove(PdfName.Outlines);
PdfOutline rootOutline = pdfDoc.GetOutlines(false);

回答得很好@alexey subach。工作很顺利。