2014-11-20 5 views
-1

У меня есть 4 файла pdf-файлов с помощью itextsharp, я добавил значения, и я объединил/добавил 4 pdf-файла в один документ, поэтому все 4 страницы находятся под одним единственным именем файла PDF. Теперь я хочу добавить закладку в мой pdf-файл. есть ли способ сделать в C#? для лучшего понимания, пожалуйста, обратитесь ниже изображений My pdf looks like this image 1 I want to display like image 2Как добавить закладки в файл PDF?

Привет, это то, что я пытаюсь сделать, я не получаю какие-либо ошибки, но до сих пор нет закладок в моем pdf, я хочу добавить закладку с 4 разделами, как показано на рисунке. После слияния я хочу добавить закладку в окончательный pdf.

enter code herepublic string MergePDFs() 
    { 
     string outPutFilePath = @"D:\jeldsbre.pdf"; 
     string genereatedpdfs = @"D:\genereatedpdfs"; 

     using (FileStream stream = new FileStream(outPutFilePath, FileMode.Create)) 
     { 
      Document pdfDoc = new Document(PageSize.A4); 
      PdfCopy pdf = new PdfCopy(pdfDoc, stream); 
      pdf.SetMergeFields(); 
      pdfDoc.Open(); 
      var files = Directory.GetFiles(genereatedpdfs); 
      Console.WriteLine("Merging files count: " + files.Length); 
      int i = 1; 
      foreach (string file in files) 
      { 
       Console.WriteLine(i + ". Adding: " + file); 
       pdf.AddDocument(new PdfReader(file)); 

       i++; 
      } 
      List<Dictionary<string, object>> bookmarks = new List<Dictionary<string, object>>(); 
      IList<Dictionary<string, object>> tempBookmarks = new List<Dictionary<string, object>>(); 
      SimpleBookmark.ShiftPageNumbers(tempBookmarks, 1, null); 
      bookmarks.AddRange(tempBookmarks); 
      SimpleBookmark.ShiftPageNumbers(tempBookmarks, 3, null); 
      bookmarks.AddRange(tempBookmarks); 
      pdf.Outlines = bookmarks; 
      if (pdfDoc != null) 
       pdfDoc.Close(); 
      string base64 = GetBase64(outPutFilePath); 
      return base64; 
     }    

    } 
+0

Этот вопрос звучит как возможный дубликат [Объединить PDF-файлы и добавить закладку с помощью iText в java] (http://stackoverflow.com/questions/23688308/merge-pdfs-and-add-bookmark-with-itext-in- java) с той лишь разницей, что этот вопрос касается iTextSharp/C# (но ответ почти идентичен, так как между iText и iTextSharp практически нет разницы) –

+0

Спасибо ... Я последую за этим, и я обновлю вас. – kiransr

+0

Я также предоставил «полномасштабный» ответ (Java и C#), но этот ответ предполагает, что в существующих документах уже есть закладки. (Это не ясно из вашего вопроса, если это так.) –

ответ

0

Если предположить, что ваши оригинальные файлы PDF уже есть закладки, то вы должны объединить не только документы (используя PdfCopy класс), вы также должны объединить различные закладки структуры различных файлов (используя SimpleBookMark класс), не забывая при этом учитывать, что вам нужно правильно переводить номера страниц.

Это делается в ConcatenateBookmarks, например, в 7-й главе моей книги:

// Create a list for the bookmarks 
ArrayList<HashMap<String, Object>> bookmarks = new ArrayList<HashMap<String, Object>>(); 
List<HashMap<String, Object>> tmp; 
for (int i = 0; i < src.length; i++) { 
    reader = new PdfReader(src[i]); 
    // merge the bookmarks 
    tmp = SimpleBookmark.getBookmark(reader); 
    SimpleBookmark.shiftPageNumbers(tmp, page_offset, null); 
    bookmarks.addAll(tmp); 
    // add the pages 
    n = reader.getNumberOfPages(); 
    page_offset += n; 
    for (int page = 0; page < n;) { 
     copy.addPage(copy.getImportedPage(reader, ++page)); 
    } 
    copy.freeReader(reader); 
    reader.close(); 
} 
// Add the merged bookmarks 
copy.setOutlines(bookmarks); 

Для С # этого примера, пожалуйста, посмотрите на http://tinyurl.com/itextsharpIIA2C07 для соответствующего iTextSharp например:

// Create a list for the bookmarks 
List<Dictionary<String, Object>> bookmarks = 
    new List<Dictionary<String, Object>>();    
for (int i = 0; i < src.Count; i++) { 
    PdfReader reader = new PdfReader(src[i]); 
    // merge the bookmarks 
    IList<Dictionary<String, Object>> tmp = 
    SimpleBookmark.GetBookmark(reader); 
    SimpleBookmark.ShiftPageNumbers(tmp, page_offset, null); 
    foreach (var d in tmp) bookmarks.Add(d); 
    // add the pages 
    int n = reader.NumberOfPages; 
    page_offset += n; 
    for (int page = 0; page < n;) { 
     copy.AddPage(copy.GetImportedPage(reader, ++page)); 
    } 
} 
// Add the merged bookmarks 
copy.Outlines = bookmarks; 

Если у существующих документов нет закладок (или если вы не хотите копировать существующие документы), тогда ваш вопрос является дубликатом вопроса, который я ответил полгода назад: Merge pdfs and add bookmark with iText in java