问题描述
我正在使用iTextSharp在PDF中设置值。所有文本均正常运行,但图像现在以PDF显示。我的代码如下:
string pdfTemplate = string.Empty;
pdfTemplate = Server.MapPath("~/Documents/PDF/ESignSummary.pdf");
PdfReader _reader = new PdfReader(pdfTemplate);
using (MemoryStream ms = new MemoryStream())
{
pdfstamper stamper = new pdfstamper(_reader,ms);
using (stamper)
{
Dictionary<string,string> info = _reader.Info;
docServices.docSummaryFields(uniqueId,stamper.AcroFields,imagepath,stamper);
}
}
public void docSummaryFields(long uniqueId,dynamic _accrofield,string imagepath,pdfstamper stamper)
{
_accrofield.SetField("Image21",imagepath);
}
我已将图像设置为Image21。我在Google上搜索了类似的内容,但在我的情况下不起作用。你能指导我哪里出错了吗?
解决方法
没有用于图像值的AcroForm表单字段,因此iText不支持将字段设置为图像值,因为这是不可能的。
显然,曾经曾经有必要支持诸如图像字段之类的东西,因此Adobe建立了一种变通方法:他们引入了JavaScript方法,该方法允许更改外观(而不是 value )按钮,并在其特殊的按钮字段的推送事件侦听器中调用了这些方法,这些按钮在其PDF表单设计软件中显示为“图像字段”。
因此,要“设置”此类“图像字段”的图像,您实际上必须将图像设置为按钮字段的外观 。
因此,如果string targetButton
包含“图像字段”(即按钮字段)的名称,并将位图加载到iTextSharp.text.Image image
中,则可以在{ {1}}:
PdfStamper stamper
如果最终不得不从此类“图像字段”中“获取”图像值,则必须从该字段的外观中检索图像。阅读this answer了解详情。
当心!所有这些都指的是AcroForm表单(根据您的问题标题而定)。如果您以后需要处理带有XFA表单的PDF(是的,仍然有一些组织,尤其是政府组织,它们尚未意识到自2017年以来已经弃用了PDF中的XFA表单),情况就不一样了,XFA表单确实知道实际的图像字段。