使用itextsharp将图像附加到fdf

时间:2013-03-18 15:46:26

标签: pdf itextsharp fdf

我正在努力重构使用Active PDF Toolkit和Adobe的FDFToolkit的PDF表单Web应用程序。我的目标是使用iTextSharp:

  1. 使用数据库中的数据预填充表单字段
  2. 允许用户通过FDF附加签名和/或条形码图像
  3. 项目#1不是问题。第2项是最大的挑战。让我提供一些背景知识:

    这是一个Web应用程序,可以将PDF格式设置为一次。初始加载后,表单上有2个关键按钮,用于将PDF表单提交到查询字符串中带有操作参数的URL。这些按钮称为“保存”和“签名”。 “保存”按钮获取FDF字段字典并将其保存到数据库。 “签名”按钮查找已登录用户的签名,并将签名图像附加到FDF,并将FDF写入HTTP响应。

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

    FDFSetAP(string bstrFieldName,short whichFace,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);
    

    谢谢!

1 个答案:

答案 0 :(得分:1)

我通过使用PdfStamper和制作按钮字段将图像放在表单上。您可以使用“按钮”字段替换现有字段,并将“按钮”设置为“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);
}