当前位置: 首页 > 知识库问答 >
问题:

在C#中使用iTextSharp在PDF中添加多重数字签名

章玮
2023-03-14
PdfReader reader = new PdfReader(fileName);
using (FileStream fout = new FileStream(SignedFileName, FileMode.Create, FileAccess.ReadWrite))
{
    // appearance
    PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0');
    PdfSignatureAppearance appearance = stamper.SignatureAppearance;
    //appearance.Reason = SignReason;
    //appearance.Location = SignLocation;
    appearance.SignDate = DateTime.Now.Date;
    appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(xPos, yPos, xPos + 200, yPos + 100), PageNo, null);//.IsInvisible

    // Custom text and background image
    appearance.Image = iTextSharp.text.Image.GetInstance(SignatureImg);
    appearance.ImageScale = 0.6f;
    appearance.Image.Alignment = 300;
    appearance.Acro6Layers = true;

    StringBuilder buf = new StringBuilder();
    buf.Append("Digitally Signed by ");
    String name = SignerName;

    buf.Append(name).Append('\n');
    buf.Append("Date: ").Append(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss zzz"));

    string text = buf.ToString();

    appearance.Layer2Text = text;

    //digital signature
    IExternalSignature es = new PrivateKeySignature(pk, "SHA-256");
    MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, CryptoStandard.CMS);

    stamper.Close();

}

共有1个答案

乌翰学
2023-03-14

错误在这一行:

PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0');

将其更改为:

PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', true);

说明:您不是在追加模式下对文档进行签名。

 类似资料:
  • 出身背景 我使用iTextSharp已经有一段时间了。我已经创建了一个带有两个可签名的PdfFormFields的pdf文档。如果我打开pdf文档,我可以手动对每个字段进行手动签名。我希望通过iTextSharp完成这件事。 我目前正在从X509Store检索证书。直到现在,我都能弄明白。 问题 有人能告诉我如何使用X509Certificate2签署一个已经存在的签名字段吗。 工具书类 以下参考

  • 将LTV添加到数字签名后,它显示文档已更改。 参考后:LTV认证签名后,PDF显示“文档已更改” 我对代码进行了更改,它可以很好地用于除此文档以外的所有文档:https://www.sendspace.com/file/3ulwn7-显示无效签名。 我们还使用来自global sign的文档签名服务。 以下代码用于添加LTV: 编辑:我认为我在代码中操作pdf的方式导致了阅读/编写pdf的问题。不

  • 我正在使用iTextSharp&pkcs11RsaSignature在PDF文档的每一页插入数字签名。以下是我的代码: 可以看出,这不是一种非常优雅的编程方式,因为文件的读写次数与页数一样多。是否有其他方法在PDF文件的每一页插入数字签名。 这里实际上要做的是--如果PDF文档被拆分为页(将来),因为内容没有改变,所以技术上数字签名应该对它签署的页有效。但我知道签名会作废的。(重新表述问题--是否

  • 我用从GlobalSign收到的通用串行总线令牌签署了一个PDF文件。但是我看不到Adobe的任何图标表明证书是有效的。 我从GlobalSign收到的USB令牌是一个可信任(安全/信任)证书。但我不确定为什么看不到可信/安全证书图标。 签名PDF如下所示: 我还可以从Adobe Acrobat DC看到这个图标的签名:

  • 如何使用Perl中的数字签名对pdf文件进行签名?我能够提取pdf的内容,并生成签名字符串通过 #$Content->要签名的pdf内容

  • 我想使用在数字PDF末尾插入空白页面。我的困惑是添加页面会使现有签名无效?谢谢。