2017-02-17 10 views
1

複数のpdfsをマージし、それぞれにブックマークを持つプログラムを作成しようとしています。Itext7でマージするときにPDFにブックマークを追加する方法

私の起動方法は次のとおりです。

private Byte[] MergePdfForms(Dictionary<string, Stream> files) 
    { 
     var dest = new MemoryStream(); 
     PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
     PdfMerger merger = new PdfMerger(pdf); 

     foreach (var keyValuePair in files) 
     { 
       //TODO add bookmark to this page 
      PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(keyValuePair.Value)); 
      merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages()); 
      firstSourcePdf.Close(); 
     } 

     pdf.Close(); 
     return dest.ToArray(); 
    } 

私は任意のブックマークを作成しません

pdf.InitializeOutlines(); 
    pdf.AddNamedDestination("Test Bookmark", pdf.GetLastPage().GetPdfObject()); 

のようなものを試してみました。

答えて

3

は、ここでは例を見てみましょう:http://developers.itextpdf.com/examples/merging-pdf-documents/clone-merging-documents-bookmarks

private byte[] MergePdfForms(Dictionary<string, Stream> files) 
    { 
     var dest = new MemoryStream(); 
     PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
     PdfMerger merger = new PdfMerger(pdf); 
     PdfOutline rootOutline = pdf.GetOutlines(false); 
     PdfOutline helloWorld = rootOutline.AddOutline("Root"); 

     int pages = 1; 
     foreach (var keyValuePair in files) 
     { 
      var firstSourcePdf = new PdfDocument(new PdfReader(keyValuePair.Value)); 
      var subPages = firstSourcePdf.GetNumberOfPages(); 
      merger.Merge(firstSourcePdf, 1, subPages); 
      firstSourcePdf.Close(); 

      var link1 = helloWorld.AddOutline(keyValuePair.Key); 
      link1.AddDestination(PdfExplicitDestination.CreateFit(pdf.GetPage(pages))); 
      pages += subPages; 

     } 
     pdf.Close(); 
     return dest.ToArray(); 
    } 
関連する問題