c# - 如何在 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。我在谷歌上搜索过类似的东西,但在我的情况下不起作用。你能指导我哪里出错了吗?
解决方案
没有用于图像值的 AcroForm 表单字段,因此 iText 不支持将字段设置为图像值,因为这是不可能的。
显然,曾经有必要支持像图像字段这样的东西,所以 Adobe 建立了一个解决方法:他们引入了 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表单确实知道实际的图像字段。
推荐阅读
- javascript - 需要使用 HTML、CSS 和 Javascript 移除一个电表箱
- asp.net-mvc - Visual Studio 调试“无法访问此站点”
- javascript - 微信深层链接无法在移动浏览器的应用中正常打开
- rest - CakePHP 3 API 的 POST 请求不起作用
- c++ - 如何将 cv::Mat 转换为 vtkImageData?
- php - 如果文本旁边存在文本,则获取元素内容
- css - 垂直分离 Angular Material 卡片
- php - 模态中的 Yii2 Pjax Gridview 将重新加载页面而不是更新
- excel - Excel 公式更改为 m/d/y
- ios - 用 NSTextField 中获得的值减去小时数