Realmente me puede estar faltando algo, pero hice algo mucho más simple. Admito que esta solución probablemente no actualice los marcadores (como en la mejor respuesta aquí hasta ahora), pero funciona perfectamente para mí. Como fusionaba documentos con formularios rellenables, utilicé PdfCopyFields en lugar de PdfCopy.
Aquí está el código (he despojado de todo el manejo para que el código real más visible de error, agrego un try..finally para cerrar los recursos abiertos, si usted planea usar el código):
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();
}
puede pasar cualquier corriente, ya sea un FileStream, un MemoryStream (útil cuando se lee el archivo PDF desde bases de datos, sin necesidad de archivos temporales, etc.)
Ejemplo uso:
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));
}
números de página se basan-1 –