【发布时间】:2012-03-02 21:49:55
【问题描述】:
我正在使用 iTextSharp,并在内存中创建了一个新文档(我正在合并多个 PDF,然后添加一个带有数字签名的新页面。)
但是我有一点问题。我有我的 Document 对象,并且所有内容都输出了,但是我到底如何将 PdfFormField 添加到 Document 中呢?我必须使用压模吗?这仅存在于内存中,不会保存在任何地方。
例如:
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。 -
谢谢。当世界上的每个示例都使用 ToArray 时,我注意到了这种差异(我的错!)。很高兴指出,以免我的坏例子毁了别人:)
标签: asp.net itextsharp