更新后 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 版本忽略这个设置。较新的版本尊重该设置。
使用 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 版本忽略这个设置。较新的版本尊重该设置。