2013-03-18 131 views
-1

我正在重構使用Active PDF Toolkit和Adobe FDFToolkit的PDF表單Web應用程序。我的目標是使用iTextSharp的到:使用itextsharp將圖像附加到fdf

  1. 預填充數據的表單字段從數據庫
  2. 允許用戶通過FDF

附上簽名和/或條碼圖像項目#1不是問題。項目#2是最大的挑戰。讓我提供一些背景:

這是一個Web應用程序,它呈現PDF格式一次。初始加載後,表單上有兩個按鍵,它們將PDF表單提交給查詢字符串中帶有操作參數的URL。這些按鈕被稱爲「保存」和「簽名」。保存按鈕採用FDF字段字典並將其保存到數據庫。 Sign按鈕爲登錄用戶查找簽名,並將簽名圖像附加到FDF,並將FDF寫入HTTP響應。

的FDFToolkit支持使用該方法的圖像附着到字段:

FDFSetAP(串bstrFieldName,短whichFace,串bstrFileName,短頁次)

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

我通過使用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); 
}