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
。
**不要**調用'MemoryStream'上的'GetBuffer()',而是調用'ToArray()'。前者包含未初始化的字節,可能會產生損壞的PDF。 – 2012-03-05 18:39:36
謝謝。當世界上的每個例子都使用ToArray(我的壞!)時,我注意到了這種差異。很好指出,以免我的壞例子毀了別人:) – Yablargo 2012-03-07 18:30:35