2017-02-17 4 views
1

J'essaye de créer un programme qui fusionne plusieurs fichiers PDF et qui a un signet pour chacun d'entre eux.Comment ajouter des signets au PDF lors de la fusion dans Itext7

Ma méthode de départ est:

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(); 
    } 

J'ai essayé des choses comme

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

Ce qui ne crée pas de signets.

Répondre

3

Jetez un oeil à l'exemple ici: 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(); 
    }