Tôi thực sự có thể thiếu một cái gì đó, nhưng tôi đã làm điều gì đó đơn giản hơn nhiều. Tôi thừa nhận giải pháp này có lẽ sẽ không cập nhật bookmark (như trong câu trả lời tốt nhất ở đây cho đến nay), nhưng nó hoạt động hoàn hảo cho tôi. Vì tôi đã hợp nhất các tài liệu với các biểu mẫu có thể điền, tôi đã sử dụng PdfCopyFields thay vì PdfCopy.
Đây là mã (tôi đã bị tước tất cả các lỗi xử lý để làm cho đoạn code thực tế rõ ràng hơn, thêm một try..finally để đóng nguồn mở nếu bạn có kế hoạch sử dụng mã):
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();
}
bạn có thể vượt qua bất kỳ dòng, có thể là một FileStream, một MemoryStream (hữu ích khi đọc PDF từ cơ sở dữ liệu, không cần phải cho các tập tin tạm thời, vv)
mẫu sử dụng:
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));
}
số trang được 1 dựa trên –