添加带书签的文件

时间:2013-02-06 12:35:22

标签: itextsharp

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

1 个答案:

答案 0 :(得分:1)

请阅读Chapter 6 of my book。在表6.1中,您将阅读:

  

可以从其他PDF文档导入页面。主要缺点是导入页面的所有交互功能(注释,书签,字段等)都会在此过程中丢失。

这正是您的体验。但是,如果你查看该表中列出的其他类,你会发现PdfStamper,PdfCopy等...这些类确实保留了交互功能。

PdfStamper会保留书签。如果您想使用PdfCopy(或PdfSmartCopy),则需要阅读第7章以了解如何保留它们。第7章不是免费提供的,但您可以参考以下示例:Java / C#。您需要ConcatenateBookmarks示例。

请注意,您的代码目前看起来很复杂,因为您没有使用正确的类。使用PdfStamper可以显着减少代码行数。