使用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
。这有什么意义吗?
答案 0 :(得分:2)
您已从2008年发布的版本跳到2014年发布的版本。这两个版本之间有 6年。
(抱歉,我无法抗拒创造权力的游戏 meme ;-))
请提供可再现问题的SSCCE。很多人都在使用iTextSharp 5.5.x填写表格而没有遇到任何问题。
如果添加以下行会发生什么:
form.GenerateAppearances = true;
请参阅ITextSharp PDFTemplate FormFlattening removes filled data
如果这样可以解决您的问题,那么您的原始表单会设置一个阻止iTextSharp生成外观的设置。旧的iTextSharp版本忽略此设置。更新版本尊重该设置。