iTextSharp - Использование PDFAction.GotoLocalPage в объединенном PDF
Я написал некоторый код, который объединяет несколько PDF-файлов в один PDF-файл, который затем отображается в MemoryStream. Это прекрасно работает. Что мне нужно сделать, это добавить оглавление в конец файла со ссылками на начало каждого из отдельных PDF-файлов. Я планировал сделать это с помощью действия GotoLocalPage, которое имеет опцию для номеров страниц, но, похоже, не работает. Если я изменю действие на код, приведенный ниже, на один из предварительно заданных, например PDFAction.FIRSTPAGE, он будет работать нормально. Разве это не работает, потому что я использую объект PDFCopy для параметра записи GotoLocalPage?
Document mergedDoc = new Document();
MemoryStream ms = new MemoryStream();
PdfCopy copy = new PdfCopy(mergedDoc, ms);
mergedDoc.Open();
MemoryStream tocMS = new MemoryStream();
Document tocDoc = null;
PdfWriter tocWriter = null;
for (int i = 0; i < filesToMerge.Length; i++)
{
string filename = filesToMerge[i];
PdfReader reader = new PdfReader(filename);
copy.AddDocument(reader);
// Initialise TOC document based off first file
if (i == 0)
{
tocDoc = new Document(reader.GetPageSizeWithRotation(1));
tocWriter = PdfWriter.GetInstance(tocDoc, tocMS);
tocDoc.Open();
}
// Create link for TOC, added random number of 3 for now
Chunk link = new Chunk(filename);
PdfAction action = PdfAction.GotoLocalPage(3, new PdfDestination(PdfDestination.FIT), copy);
link.SetAction(action);
tocDoc.Add(new Paragraph(link));
}
// Add TOC to end of merged PDF
tocDoc.Close();
PdfReader tocReader = new PdfReader(tocMS.ToArray());
copy.AddDocument(tocReader);
copy.Close();
displayPDF(ms.ToArray());
Я предполагаю, что альтернативой будет ссылка на именованный элемент (вместо номера страницы), но я не вижу, как добавить «невидимый» элемент в начало каждого файла перед добавлением в объединенный документ?