iTextSharp-无法将文件与表单数据合并
本文关键字:表单 数据 合并 文件 iTextSharp- | 更新日期: 2023-09-27 18:23:58
我正在尝试合并包含表单数据的PDF文件。我在StackOverflow上尝试了几个不同的iTextSharp示例,但它们都导致了相同的行为:合并的第一个PDF文档保持其表单数据,但随后的PDF文档丢失了表单数据。我还尝试在合并之前使用下面的代码将文档压平,但这只会导致所有表单数据完全丢失。
public static byte[] FlattenPdfForm(byte[] bytes)
{
PdfReader reader = new PdfReader(bytes);
using (MemoryStream stream = new MemoryStream())
{
PdfStamper stamper = new PdfStamper(reader, stream) { FormFlattening = true };
stamper.Close();
reader.Close();
return stream.ToArray();
}
}
我试图合并的PDF文档是从UPS API返回的。以下是一个示例文档:http://dl.dropbox.com/u/9005746/OriginalPDF.pdf
关于如何在维护表单数据的同时将多个PDF文件(如上图)合并为一个PDF文件,你有什么建议吗?
这段代码对我来说很好:
PdfCopyFields copier = new PdfCopyFields(new FileStream(tgtfilename, FileMode.Create));
int doc = 0;
foreach (string filename in srcfilenames)
{
PdfReader reader = new PdfReader(filename);
// This should ensure field names are unique across merged documents
foreach (var item in reader.AcroFields.Fields)
reader.AcroFields.RenameField(item.Key, String.Format("_D{0}_{1}", doc++, item.Key));
copier.AddDocument(reader);
}
copier.Close();
我根据这个答案改编而成。
对上述代码的轻微更改适用于我
public static void CreateBulkPdfFile(string[] fileNames, string outFile)
{
PdfCopyFields copier = new PdfCopyFields(new FileStream(outFile, FileMode.Create));
int doc = 0;
foreach (string filename in fileNames)
{
PdfReader reader = new PdfReader(filename);
// This should ensure field names are unique across merged documents
foreach (var item in reader.AcroFields.Fields)
reader.AcroFields.RenameField(item.ToString(), String.Format("_D{0}_{1}", doc++, item.ToString()));
copier.AddDocument(reader);
}
copier.Close();
}