2012-03-02 130 views
3

我使用iTextSharp的,並在內存中創建(我是組合多個PDF文件,然後添加一個新的頁面上有一個數字簽名。)iTextSharp - 從頭創建新的PDF時 - 如何添加表單域?

我有一個有點問題,但是一個新的文檔。我有我的Document對象,並輸出所有內容,但是我怎樣才能將一個PdfFormField添加到文檔?我必須使用印模嗎?這僅存在於內存中,並不保存在任何地方。

如:

Document document = new Document(); 
MemoryStream output = new MemoryStream(); 

try 
{ 
    PdfWriter writer = PdfWriter.GetInstance(document, output); 

    document.Open(); 
    PdfContentByte content = writer.DirectContent; 

    // .... content adds a bunch of pages in 
} 
finally 
{ 
    document.Close(); 
} 

return File(output.GetBuffer(), "application/pdf", 
      "MRF-" + receipt.OrderNumber + ".pdf"); 

我有一個簽名塊這樣,我想添加到文檔的末尾:

PdfFormField sig = PdfFormField.CreateSignature(writer); 
sig.SetWidget(new iTextSharp.text.Rectangle(100, 100, 250, 150), null); 
sig.Flags = PdfAnnotation.FLAGS_PRINT; 
sig.Put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g")); 
sig.FieldName = "Signature1"; 

但我想不通的生活我如何做document.add(sig)這樣的事情,因爲它需要一個IElement

+2

**不要**調用'MemoryStream'上的'GetBuffer()',而是調用'ToArray()'。前者包含未初始化的字節,可能會產生損壞的PDF。 – 2012-03-05 18:39:36

+0

謝謝。當世界上的每個例子都使用ToArray(我的壞!)時,我注意到了這種差異。很好指出,以免我的壞例子毀了別人:) – Yablargo 2012-03-07 18:30:35

回答

3

這裏的是從Java轉換的C#/ ASP.NET版本,使用an exampleiText book通過the creator of iText寫:

Response.ContentType = "application/pdf"; 
Response.AddHeader(
    "Content-Disposition", "attachment; filename=signatureTest.pdf" 
);   
using (Document document = new Document()) { 
    PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream); 
    document.Open(); 
    document.Add(new Paragraph("A paragraph")); 
    PdfFormField sig = PdfFormField.CreateSignature(writer); 
    sig.SetWidget(new Rectangle(100, 100, 250, 150), null); 
    sig.FieldName = "testSignature"; 
    sig.Flags = PdfAnnotation.FLAGS_PRINT; 
    sig.SetPage(); 
    sig.MKBorderColor = BaseColor.BLACK; 
    sig.MKBackgroundColor = BaseColor.WHITE; 
    PdfAppearance appearance = PdfAppearance.CreateAppearance(writer, 72, 48); 
    appearance.Rectangle(0.5f, 0.5f, 71.5f, 47.5f); 
    appearance.Stroke(); 
    sig.SetAppearance(
    PdfAnnotation.APPEARANCE_NORMAL, appearance 
); 
    writer.AddAnnotation(sig); 
} 

如果你看一看,你會發現Java的例子也有代碼到簽署該文件,故意排除在上面的示例。在ASP.NET中籤名PDF文件是而不是一個簡單的任務。

相關問題