首页 > 解决方案 > 如何在 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。我在谷歌上搜索过类似的东西,但在我的情况下不起作用。你能指导我哪里出错了吗?

标签: c#model-view-controlleritextacrofields

解决方案


没有用于图像值的 AcroForm 表单字段,因此 iText 不支持将字段设置为图像值,因为这是不可能的。

显然,曾经有必要支持像图像字段这样的东西,所以 Adob​​e 建立了一个解决方法:他们引入了 JavaScript 方法,允许以交互方式更改按钮的外观(而不是value),并在 push 事件侦听器中调用这些方法他们在 PDF 表单设计软件中显示为“图像字段”的特殊按钮字段。

因此,要“设置”这样一个“图像域”的图像,您实际上必须将图像设置为按钮域的外观

因此,如果string targetButton包含“图像字段”(即按钮字段)的名称并且您将位图加载到 中iTextSharp.text.Image image,您可以像这样在 a 中“设置”它PdfStamper stamper

PushbuttonField button = stamper.AcroFields.GetNewPushbuttonFromField(targetButton);
button.Image = image;
stamper.AcroFields.ReplacePushbuttonField(targetButton, button.Field);

如果您最终必须从这样的“图像字段”中“获取”图像值,则必须从该字段的外观中检索图像。有关详细信息,请阅读此答案


谨防!所有这些都是指 AcroForm 表格(根据您的问题标题)。如果您以后必须处理带有 XFA 表单的 PDF(是的,仍然有组织,特别是政府组织,尚未意识到 PDF 中的 XFA 表单自 2017 年以来已被弃用),情况有所不同,XFA表单确实知道实际的图像字段。


推荐阅读