1

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

1 回答 1

1

请阅读我的书的第 6 章。在表 6.1 中,您将看到:

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

这正是你所经历的。但是,如果您查看该表中列出的其他类,您会发现 PdfStamper、PdfCopy 等……它们确实保留了交互功能。

PdfStamper将保留书签。如果你想使用PdfCopy(or PdfSmartCopy),你需要阅读第 7 章来了解如何保留它们。第 7 章并非免费提供,但您可以在此处查阅示例:Java / C#。你需要这个ConcatenateBookmarks例子。

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

于 2013-02-07T08:44:51.930 回答