使用itextsharp将图像附加到FDF



我正在努力重构一个PDF表单web应用程序,该应用程序使用Active PDF工具包和来自Adobe的FDFToolkit。我的目标是使用iTextSharp来:

  1. 用数据库中的数据预填充表单字段
  2. 允许用户通过FDF附加签名和/或条形码图像
第1项不是问题所在。第二项是最大的挑战。让我提供一些背景信息: 这是一个web应用程序,它呈现PDF表单一次。在初始加载之后,表单上有两个键按钮,它们将PDF表单提交到一个URL,并在查询字符串中包含一个操作参数。这些按钮被称为"保存"one_answers"签名"。Save按钮获取FDF字段字典并将其保存到数据库中。Sign按钮查找已登录用户的签名,并将签名图像附加到FDF上,并将FDF写入HTTP响应。

FDFToolkit支持使用以下方法将图像附加到字段:

FDFSetAP(string bstrFieldName, short faceface, string bstrFileName, short pageNum)

iTextSharp在FdfWriter类中没有提供类似的方法。我考虑过子类化FdfWriter类并添加我自己的方法来附加图像,但想在这里看看是否有人有同样的问题。

我已经能够使用这种方法将图像覆盖在字段的顶部,但这是在底层PDF中,而不是FDF中。

AcroFields.FieldPosition pos = _Stamper.AcroFields.GetFieldPositions("SIGNATUREFIELD").First();
Image signature = Image.GetInstance("Signature.gif");
image.SetAbsolutePosition(pos.position.Left, pos.position.Bottom); 
image.ScaleToFit(pos.position.Width, pos.position.Height);
PdfContentByte pcb = _Stamper.GetOverContent(pos.page);
pcb.AddImage(image);

谢谢!

我通过使用PdfStamper和制作Pushbutton字段将图像放在表单上。您可以将现有的字段替换为Pushbutton字段,并将Pushbutton设置为READ_ONLY,这样它就不能被按下,并且看起来像一个静态图像。这将使您试图添加的图像保持为字段注释,而不是将其添加到页面内容中。

using (PdfStamper stamper = new PdfStamper(new PdfReader(inputFile), File.Create(outputFile)))
{
    AcroFields.FieldPosition fieldPosition = stamper.AcroFields.GetFieldPositions(fieldName)[0];
    PushbuttonField imageField = new PushbuttonField(stamper.Writer, fieldPosition.position, fieldName);
    imageField.Layout = PushbuttonField.LAYOUT_ICON_ONLY;
    imageField.Image = iTextSharp.text.Image.GetInstance(imageFile);
    imageField.ScaleIcon = PushbuttonField.SCALE_ICON_ALWAYS;
    imageField.ProportionalIcon = false;
    imageField.Options = BaseField.READ_ONLY;
    stamper.AcroFields.RemoveField(fieldName);
    stamper.AddAnnotation(imageField.Field, fieldPosition.page);
}

相关内容

  • 没有找到相关文章

最新更新