2016-06-28 2 views
0

Мне не удалось найти ответы на мои вопросы. Я хотел бы знать, можно ли обновить ссылку на страницу для каждого элемента ТОС. iTextSharp Содержание (TOC) обновление

Обратите внимание, что вопрос заключается в обновлении ссылок на TOC, а не в закладках.

Из того, что я прочитал до сих пор, это сложный процесс, требующий по меньшей мере недели работы над программированием. Поскольку это нелегко добиться благодаря iTextSharp.

  1. У меня есть первый PDF с 5 страницами. Первая страница - это TOC.

  2. У меня есть второй pdf с 6 страницами. Первая страница - это TOC.

  3. Я хочу объединить два документа.

  4. Страницы TOC размещаются на верхней части объединенного документа.

  5. Обновите каждый элемент в ТОС ссылкой на новую страницу. Таким образом, когда вы нажимаете на нее, вы попадаете туда, где она должна находиться в объединенном документе.

ответ

0

Это объясняется в книге «iText in Action - Second Edition». Если у вас нет копии книги, вы должны взглянуть на примеры, более конкретно на пример ConcatenateBookmarks.

Я вижу, что вы отметили вопрос тегом C#, поэтому вместо копирования/вставки примера Java я скопирую пример C#. src - это List байт-массивов с документами PDF.

public byte[] ManipulatePdf(List<byte[]> src) { 
    using (MemoryStream ms = new MemoryStream()) { 
    // step 1 
    using (Document document = new Document()) { 
     // step 2 
     using (PdfCopy copy = new PdfCopy(document, ms)) { 
     // step 3 
     document.Open(); 
     // step 4 
     int page_offset = 0; 
     // 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; 
     } 
    } 
    return ms.ToArray(); 
    } 
} 

Update:

Если речь идет о другом типе ТОС, то вы должны смотреть на ConcatenateNamedDestinations примере.

В этом случае у нас есть ссылки из одного документа на другой документ с использованием названных пунктов назначения. В этом случае нам необходимо ConsolidateNamedDestinations() и MakeRemoteNamedDestinationsLocal(). Версия C# этого примера можно найти здесь: ConcatenateNamedDestinations.cs

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

+0

Спасибо, что поделились своим пониманием. Я на самом деле ищут ссылки ссылки ссылки, а не обновления закладки. –

+0

Я обновил ответ. Вам нужно будет уточнить, что вы имеете в виду, когда говорите «обновления ссылок ссылок». –

Смежные вопросы