Asp.net iTextSharp--从头开始创建新的PDF时--如何添加表单字段?

Asp.net iTextSharp--从头开始创建新的PDF时--如何添加表单字段?,asp.net,itextsharp,Asp.net,Itextsharp,我正在使用iTextSharp,并在内存中创建了一个新文档(我正在组合多个PDF,然后添加一个带有数字签名的新页面。) 然而,我有一点问题。我有我的文档对象,所有东西都输出,但我该如何向文档中添加PdfFormField呢?我必须用压模吗?这只存在于内存中,不会保存在任何地方 e、 g: 我想在文档末尾添加一个签名块: PdfFormField sig = PdfFormField.CreateSignature(writer); sig.SetWidget(new iTextSharp.t

我正在使用iTextSharp,并在内存中创建了一个新文档(我正在组合多个PDF,然后添加一个带有数字签名的新页面。)

然而,我有一点问题。我有我的文档对象,所有东西都输出,但我该如何向文档中添加PdfFormField呢?我必须用压模吗?这只存在于内存中,不会保存在任何地方

e、 g:

我想在文档末尾添加一个签名块:

 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

以下是从Java转换而来的C#/ASP.NET版本,使用的是由编写者编写的:


如果您看一看Java示例,您会注意到还有一段代码用来对文档进行签名,这段代码故意被排除在上面的示例之外。在ASP.NET中签署PDF不是一项简单的任务。

不要在
内存流上调用
GetBuffer()
,而是调用
ToArray()
。前者包括未初始化的字节,这些字节可能/将生成损坏的PDF。谢谢。当世界上的每一个例子都使用Array(我的错!)时,我注意到了这种差异。很好地指出,以免我的坏榜样毁了别人:)
 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";
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);
}