Я действительно могу что-то упустить, но я сделал что-то намного проще. Я допускаю, что это решение, вероятно, не будет обновлять закладки (как в лучшем ответе здесь до сих пор), но оно работает безупречно для меня. Поскольку я объединял документы с заполняемыми формами, я использовал PdfCopyFields вместо PdfCopy.
Вот код (я удалил всю обработку ошибок, чтобы сделать фактический код более заметным, добавьте try..finally, чтобы закрыть открытые ресурсы, если вы планируете использовать код):
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();
}
Вы можете передать любой поток, будь то FileStream, MemoryStream (полезно при чтении PDF из баз данных, нет необходимости во временных файлах и т. д.)
Пример использования:
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));
}
person
Loudenvier
schedule
03.03.2010