itextSharp-合并一批PDF字节数组



我正在使用itextSharp填写PDF上的一些字段。我需要能够将一系列PDF组合到一个批处理PDF文件中。在下面,我正在通过SQL结果集进行循环,并以与当前记录相对应的值填充了PDF的字段,将其存储为字节数组,并将所有这些数组整合到字节数组列表中。然后,我试图将该列表中的每个字节数组合并到一个字节数组中,并将其作为PDF将其作为用户。

它似乎可以工作,生成一个包含我结果集的单个页面的单个文件,但每个页面上的所有字段都空白。使用FillForm()使用单个PDF时,它可以按预期工作。我在做什么错?

byte[] pdfByteArray = new byte[0]; 
List<byte[]> pdfByteArrayList = new List<byte[]>();
byte[] pdfByteArrayItem = new byte[0];
foreach (DataRow row in results.Rows)
{
    certNum = row[1].ToString();
    certName = row[2].ToString();
    certDate = row[3].ToString();
    pdfByteArrayItem = FillForm(certType, certName, certNum, certDate);
    pdfByteArrayList.Add(pdfByteArrayItem);
}
using (var ms = new MemoryStream()) {
    using (var doc = new Document()) {
        using (var copy = new PdfSmartCopy(doc, ms)) {
            doc.Open();
            //Loop through each byte array
            foreach (var p in pdfByteArrayList) {
                //Create a PdfReader bound to that byte array
                using (var reader = new PdfReader(p)) {
                    //Add the entire document instead of page-by-page
                    copy.AddDocument(reader);
                }
            }
            doc.Close();
        }
    }
pdfByteArray = ms.ToArray();
context.Response.ContentType = "application/pdf";
context.Response.BinaryWrite(pdfByteArray);
context.Response.Flush();
context.Response.End();
private byte[] FillForm(string certType, string certName, string certNum, string certDate)
{
    string pdfTemplate = string.Format(@"\filePath{0}.pdf", certType);
    PdfReader pdfReader = new PdfReader(pdfTemplate);
    MemoryStream stream = new MemoryStream();
    PdfStamper pdfStamper = new PdfStamper(pdfReader, stream);
    AcroFields pdfFormFields = pdfStamper.AcroFields;
    // set form pdfFormFields
    pdfFormFields.SetField("CertName", certName);
    pdfFormFields.SetField("CertNum", certNum);
    pdfFormFields.SetField("CertDate", certDate);
    // flatten the form to remove editting options, set it to false
    // to leave the form open to subsequent manual edits
    pdfStamper.FormFlattening = false;
    // close the pdf
    pdfStamper.Close();
    stream.Flush();
    stream.Close();
    byte[] pdfByte = stream.ToArray();
    return pdfByte;
}

设置字段值后,添加下面的行似乎已修复:

pdfFormFields.GenerateAppearances = true;

最新更新