我正在尝试合并包含表单数据的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,您有什么建议吗?
答案 0 :(得分:0)
此代码适用于我:
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();
我从this answer改编了它。
答案 1 :(得分:0)
上述代码的细微变化对我有用
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();
}