2013-02-06 56 views
0

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

你有没有考虑过使用一个PDF格式的工作原始PDF与轮廓添加你的额外内容?一个PDFStamper保留所有的轮廓和原始的所有互动功能... – mkl

+0

看看这个链接http://www.mikesdotnetting.com/Article/84/iTextSharp-Links-and-Bookmarks –

+0

你在什么语言编程? - C锋利? –

回答

1

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

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

这正是你所体验到的。但是,如果您查看该表中列出的其他类,则会发现PdfStamper,PdfCopy等等,这些类可以保留交互式功能。

PdfStamper将保留书签。如果您想使用PdfCopy(或PdfSmartCopy),则需要阅读第7章以了解如何保留它们。第7章不是免费的,但您可以在这里查阅示例:Java/C#。你需要ConcatenateBookmarks的例子。

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