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文件,你有什么建议吗?

iTextSharp-无法将文件与表单数据合并

这段代码对我来说很好:

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();
}