更新后iTextSharp不起作用

时间:2015-01-21 23:38:17

标签: c# asp.net-mvc-4 itextsharp

使用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)

该方法继续成功返回PDF,但在PDF中使用SetField的SetValues不起作用。

有什么想法吗?

调试我看到fieldsManager.Fields包含一个名为Values的属性,它包含一个名为IsReadOnly的属性,该属性设置为True。这有什么意义吗?

1 个答案:

答案 0 :(得分:2)

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

One does not simply...

(抱歉,我无法抗拒创造权力的游戏 meme ;-))

请提供可再现问题的SSCCE。很多人都在使用iTextSharp 5.5.x填写表格而没有遇到任何问题。

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

form.GenerateAppearances = true;

请参阅ITextSharp PDFTemplate FormFlattening removes filled data

如果这样可以解决您的问题,那么您的原始表单会设置一个阻止iTextSharp生成外观的设置。旧的iTextSharp版本忽略此设置。更新版本尊重该设置。