我想使用iTextSharp添加PDF文件,但如果PDF文件包含书签,则还应添加它们。
目前我正在使用以下代码
Document document = new Document();
//Step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create));
writer.ViewerPreferences = PdfWriter.PageModeUseOutlines;
//Step 3: Open the document
document.Open();
PdfContentByte cb = writer.DirectContent;
//The current file path
string filename = "D:\\rtf\\2.pdf";
// we create a reader for the document
PdfReader reader = new PdfReader(filename);
//Chapter ch = new Chapter("", 1);
for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++)
{
document.SetPageSize(reader.GetPageSizeWithRotation(1));
document.NewPage();
// Insert to Destination on the first page
if (pageNumber == 1)
{
Chunk fileRef = new Chunk(" ");
fileRef.SetLocalDestination(filename);
document.Add(fileRef);
}
PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
int rotation = reader.GetPageRotation(pageNumber);
if (rotation == 90 || rotation == 270)
{
cb.Add(page);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
document.Close();
答案 0 :(得分:1)
请阅读Chapter 6 of my book。在表6.1中,您将阅读:
可以从其他PDF文档导入页面。主要缺点是导入页面的所有交互功能(注释,书签,字段等)都会在此过程中丢失。
这正是您的体验。但是,如果你查看该表中列出的其他类,你会发现PdfStamper,PdfCopy等...这些类确实保留了交互功能。
PdfStamper
会保留书签。如果您想使用PdfCopy
(或PdfSmartCopy
),则需要阅读第7章以了解如何保留它们。第7章不是免费提供的,但您可以参考以下示例:Java / C#。您需要ConcatenateBookmarks
示例。
请注意,您的代码目前看起来很复杂,因为您没有使用正确的类。使用PdfStamper
可以显着减少代码行数。