2013-01-21 25 views
6

Mam plik PDF i chciałbym dodać do niego dodatkową stronę, najlepiej jako pierwszą stronę. Udało mi się to osiągnąć za pomocą PDFSharp, ale problem polega na tym, że oryginalny plik PDF zawiera zakładki, które chciałbym zachować. Korzystanie z PDFSharp wydaje się usuwać zakładki lub przynajmniej nie mam informacji o żadnych opcjach i poleceniach, aby zapisać oryginalny spis treści z nowo utworzonym plikiem PDF zawierającym dodatkową stronę.Jak dodać dodatkową stronę do istniejącego pliku PDF z zachowaniem zakładek? (PDFSharp itp.)

Czy ktoś wie, jak zachować spis treści za pomocą PDFSharp, a może w innych bibliotekach .NET, najlepiej darmowych, które pozwolą mi dodać stronę do istniejącego pliku PDF i zachować jego zakładki? (Mam świadomość, że dodanie strony jako pierwszej strony unieważniło odszukanie strony, dlatego dodanie strony jako ostatniej strony również jest w porządku.)

Dzięki wszystkim!

Odpowiedz

5

Okazało się, że plik PDF używa zakładek, a nie spisu treści.

Rozwiązanie, które współpracuje z zakładek znajduje się tutaj:
http://forum.pdfsharp.net/viewtopic.php?p=6660#p6660

Istniejący plik jest otwarty na modyfikacje, nowe strony są umieszczane na początku dokumentu - i wszystkie zakładki nadal działać.

Oto fragment kodu:

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); 
} 
+0

Dzięki za tego rozwiązania, to działało jak urok! – DotNetDeveloper