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