如何在保留书签的同时向现有pdf添加其他页面? (PDFSharp等)

时间:2013-01-21 13:54:38

标签: .net pdf-generation bookmarks pdfsharp

我有一个PDF,我想添加一个额外的页面,理想情况下是第一页。我已经能够用PDFSharp实现这一点,但问题是原始PDF包含书签,我想维护。使用PDFSharp似乎删除了书签,或者至少我不知道使用包含附加页面的新创建的PDF来保存原始目录的任何选项或命令。

是否有人知道如何将TOC与PDFSharp或任何其他.NET库(理想情况下是免费的)保存在一起,以便我可以将页面添加到现有PDF并维护其书签? (我知道添加页面作为第一页会使页面引用无效,这就是为什么在最后一页添加页面也没问题。)

全部谢谢!

1 个答案:

答案 0 :(得分:6)

原来,PDF文件使用的是书签,而不是TOC。

这里显示了一个与书签一起使用的解决方案:
http://forum.pdfsharp.net/viewtopic.php?p=6660#p6660

打开现有文件进行修改,在文档开头插入新页面 - 所有书签仍然有效。

以下是代码段:

static void Main(string[] args)
{
    const string filename = "sample.pdf";
    File.Copy(Path.Combine("D:\\PDFsharp\\PDFfiles\\sample\\", filename),
      Path.Combine(Directory.GetCurrentDirectory(), filename), true);

    // Open an existing document for editing and loop through its pages
    PdfDocument document = PdfReader.Open(filename);
    var newPage = document.InsertPage(0);

    // Get an XGraphics object for drawing
    XGraphics gfx = XGraphics.FromPdfPage(newPage);

    // Create a font
    XFont font = new XFont("Times New Roman", 20, XFontStyle.BoldItalic);

    // Draw the text
    gfx.DrawString("Hello, World!", font, XBrushes.Black,
      new XRect(0, 0, newPage.Width, newPage.Height),
      XStringFormats.Center);

    document.Save(filename);
    // ...and start a viewer.
    Process.Start(filename);
}