iTextSharp - Verwenden von PDFAction.GotoLocalPage in zusammengeführten PDF-Dateien

Ich habe einen Code geschrieben, der mehrere PDFs zu einer einzigen PDF zusammenfügt, die ich dann aus dem MemoryStream anzeige. Das funktioniert super. Was ich tun muss, ist, ein Inhaltsverzeichnis am Ende der Datei mit Links zum Anfang der einzelnen PDFs hinzuzufügen. Ich habe geplant, dies mit der Aktion GotoLocalPage zu tun, die eine Option für Seitenzahlen hat, aber anscheinend nicht funktioniert. Wenn ich die Aktion in den folgenden Code ändere, in einen der wichtigsten wie PDFAction.FIRSTPAGE, funktioniert dies einwandfrei. Funktioniert dies nicht, weil ich das PDFCopy-Objekt für den writer-Parameter von GotoLocalPage verwende?

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

Ich schätze, eine Alternative wäre, auf ein benanntes Element (anstelle der Seitenzahl) zu verlinken, aber ich kann nicht sehen, wie ich am Anfang jeder Datei ein "unsichtbares" Element anfügen kann, bevor ich es dem zusammengeführten Dokument hinzufüge.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage