我正在努力重构一个PDF表单web应用程序,该应用程序使用Active PDF工具包和来自Adobe的FDFToolkit。我的目标是使用iTextSharp来:
- 用数据库中的数据预填充表单字段
- 允许用户通过FDF附加签名和/或条形码图像
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);
}