Ich kann wirklich etwas vermissen, aber ich habe etwas viel einfacher. Ich gebe zu, dass diese Lösung wahrscheinlich Lesezeichen nicht aktualisieren wird (wie in der besten Antwort hier bisher), aber es funktioniert einwandfrei für mich. Seit ich Dokumente mit ausfüllbaren Formularen zusammengeführt habe, habe ich PdfCopyFields anstelle von PdfCopy verwendet.
Hier ist der Code (ich alle Fehler ausgezogen habe Umgang mit dem eigentlichen Code besser sichtbar zu machen, fügen Sie ein try..finally geöffnete Ressourcen zu schließen, wenn Sie mit dem Code-Plan):
void MergePdfStreams(List<Stream> Source, Stream Dest)
{
PdfCopyFields copy = new PdfCopyFields(Dest);
foreach (Stream source in Source)
{
PdfReader reader = new PdfReader(source);
copy.AddDocument(reader);
}
copy.Close();
}
Sie können einen beliebigen Strom passieren, sei es ein Filestream, ein Memorystream (nützlich, wenn die PDF von Datenbanken, keine Notwendigkeit für temporäre Dateien zu lesen, etc.)
Verwendungsbeispiel:
void TestMergePdfStreams()
{
List<Stream> sources = new List<Stream>()
{
new FileStream("template1.pdf", FileMode.Open),
new FileStream("template2.pdf", FileMode.Open),
new MemoryStream((byte[])someDataRow["PDF_COLUMN_NAME"])
};
MergePdfStreams(sources, new FileStream("MergedOutput.pdf", FileMode.Create));
}
Seitenzahlen 1-basierte –