如何在C#中的iTextsharp中向acrofield添加图像?

问题描述

我正在使用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表单确实知道实际的图像字段。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...