Это объясняется в книге «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
Я не знаю, решает ли эта проблема. Вы говорите о «обновлении ссылок ссылок», но это может означать разные вещи (названные адресаты, явные адресаты, действия).
Спасибо, что поделились своим пониманием. Я на самом деле ищут ссылки ссылки ссылки, а не обновления закладки. –
Я обновил ответ. Вам нужно будет уточнить, что вы имеете в виду, когда говорите «обновления ссылок ссылок». –