我正在使用iTextSharp,并在内存中创建了一个新文档(我正在组合多个PDF,然后添加一个带有数字签名的新页面。)
然而,我有一点问题。我有我的Document对象,并且所有内容都输出,但是我如何将PdfFormField添加到Document?我必须使用压模吗?这仅存在于内存中,不会保存在任何地方。e.g:
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
。
答案 0 :(得分:3)
以下是使用an example编写的iText book中的the creator of iText从Java转换而来的C#/ ASP.NET版本:
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 不是一项微不足道的任务。