更新后 iTextSharp 不起作用

iTextSharp doesn't work after update

使用 NuGet 更新 iTextSharp 后,PDF 生成停止工作。

我从 4.1.2.0 更新到 5.5.4.0

我的原始代码是

using (var stream = new MemoryStream())
{  
    var reader = new PdfReader(pdfPath);
    var stp = new PdfStamper(reader, stream);
    var writer = stp.Writer;
    var fieldsManager = stp.AcroFields;

    foreach (DictionaryEntry entry in fieldsManager.Fields)
    {
        var strEntry = entry.Key.ToString();
        if (strEntry == "txtNoServicio") fieldsManager.SetField(strEntry, orden.NoServicio.ToString(CultureInfo.InvariantCulture));
        if (strEntry == "txtFechaCreacionTicket") fieldsManager.SetField(strEntry, orden.FechaCreacionTicket.ToString("dd/MM/yyyy"));
        if (strEntry == "txtAgenteAsignado") fieldsManager.SetField(strEntry, orden.AgenteAsignado);
        ...
    }

    stp.FormFlattening = true;
    stp.Close();
    reader.Close();
    dataBytes = stream.GetBuffer();
}

return dataBytes;

更新后,我更改了 foreach 循环

foreach (DictionaryEntry entry in fieldsManager.Fields)

foreach (KeyValuePair<string, AcroFields.Item> entry in fieldsManager.Fields)

该方法继续 return PDF 成功,但 PDF 中的 SetValues 和 SetField 不起作用。

有什么想法吗?

调试我看到 fieldsManager.Fields 包含一个名为 Values 的 属性,它包含一个名为 IsReadOnly 的 属性,它被设置为 True。能说明什么吗?

您已从 2008 年发布的版本跳转到 2014 年发布的版本。这两个版本之间相隔 6 年

(抱歉,我忍不住创造了一个 权力的游戏 表情包 ;-) )

请提供重现该问题的 SSCCE。许多人使用 iTextSharp 5 填写表格。5.x 没有遇到任何问题。

如果添加以下行会发生什么:

form.GenerateAppearances = true;

ITextSharp PDFTemplate FormFlattening removes filled data

如果这解决了您的问题,那么您的原始表单具有阻止 iTextSharp 生成外观的设置。旧的 iTextSharp 版本忽略这个设置。较新的版本尊重该设置。