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

2024-03-30

我已经使用 iTextSharp Dll 实现了数字签名,以使用单个签名对 PDF 文件进行签名。现在,我想在之前或已经进行数字签名的 PDF 中添加另一个数字签名,但在验证一个签名时出现错误。

如何在一份 PDF 中添加多个数字签名并验证所有签名。

我正在使用以下代码:

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();

}

错误在这一行:

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

将其更改为:

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

解释:您没有以附加模式签署文档。

在进一步检查您的代码时,我发现您还添加了图像。这可能很棘手。以附加模式添加新签名解决了一个问题。添加额外的内容可能会导致额外的问题,具体取决于您使用的 iText 版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# 中使用 iTextSharp 在 PDF 中添加多个数字签名 的相关文章

  • 使用 iTextSharp 压缩 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在尝试重新压缩已创建的pdf 我正在尝试找到一种方法来重新压缩文档中的图像 以减小文件大小 我一直在尝试使用 DataLogi
  • iText 列表项或 JTextArea 中的行间距

    我需要在 GUI 中同步 PDF 列表项和 JTextArea 的行距 我可以通过调整其中之一来做到这一点 在列表项 或 JTextArea 超过一行 在 JTextArea 中将换行设置为 true 之前 这一切都运行良好 我可以调整两个
  • 在 ITextSharp 免费许可证下动态创建 .pdf

    在 ASP NET C 网站 服务器中 我使用名为 ITextSharp 的 pdf 创建器库来创建包含有关产品的文本和一些图像的 pdf 像往常一样 老板不想购买许可证 我知道如果我使用 ITextSharp 版本 4 1 6 或更低版本
  • itextsharp 不关闭文件

    我有一些用于 itextsharp 合并 2 个 pdf 文件的代码 在网上某处找到的 合并工作正常 但似乎源文件在全部完成后仍在使用 我想做的是删除我已经合并的第一个文件 通过文件上传上传 并仅保留合并的文件 肯定是执行合并的代码导致文件
  • iText PdfTextExtractor 结果文本中缺少连字

    我正在尝试获取 pdf 文件并从中获取文本 我发现了 iText 并一直在使用它 并取得了不错的成功 我剩下的一个问题是连字 起初我注意到我只是缺少字符 经过一些搜索后 我发现了这个 http support itextpdf com no
  • 如何向自定义形状添加阴影图案

    我使用 iText 绘制了一个等边三角形 如下所示 canvas setColorStroke BaseColor BLACK int x start getX int y start getY canvas moveTo x y canv
  • 如何裁剪 PDF 页面

    谁能帮助我 如何像 Acrobat Professional 那样剪切 PDF 页面 This snippet http osdir com ml windows dotnet itextsharp general 2008 09 msg0
  • 如何用 Java 从 XML 创建 PDF?

    目前 我正在 Java 中创建一个 XML 文件 并通过使用 XSL XSLT 对其进行转换来将其显示在 JSP 页面中 现在我需要获取该 XML 文件并在 PDF 中显示相同的信息 有没有办法通过使用某种 XSL 文件来做到这一点 我见过
  • 使用 Asp.net/C# 使用 USB 令牌对文本文件进行数字签名?

    我有一个 USB 令牌 Epass Capricorn 我的要求是使用它来签署文本 平面文件 PS 我相信我必须从代 码中获取 START SIGNATURE START CERTIFICATE 和 SIGNER VERSION 数据并附加
  • 图像未按顺序添加到 pdf 文档 itextsharp 中(元素顺序错误)

    我现在正在使用 iTextSharp 5 4 5 几个星期 本周 我在文档中的元素顺序方面遇到了一些奇怪的事情 我正在制作一份包含主题和图像 图表 的 pdf 报告 该文档的格式如下 NR 主题 1 的主题标题 主题 1 的图表图像 来自
  • iTextSharp - 如何将 PDFPRow 添加到 PDFPTable?

    我想将 PDFPCells 数组添加到 PDFPRow 然后将 PDFPRow 添加到 PDFPTable 但我似乎无法在 PDFPTable 中找到为此的方法 然而有一个 PDFPTable AddCell 有任何想法吗 查看PdfPTa
  • itext更改所有超链接的缩放级别以继承现有pdf中的缩放

    我正在使用以下代码将所有超链接的缩放级别更改为继承缩放 但无法改变 可能我在 PdfName DEST 和条件中犯了一些错误 因为第一页的 pdf 中没有 DEST 数组 查看屏幕截图 for int count 0 count lt re
  • 将 jasper 导出为 pdf 时出现 NoClassDefFoundError: com/itextpdf/text/DocumentException

    我创建了一个jasper报告 现在我需要将该报告导出到pdf格式 这是我的代码 compiles jrxml JasperCompileManager compileReportToFile reportName jrxml fills c
  • 如何使用 iTextSharp 设置 PDF 段落或字体行高?

    如何使用 iTextSharp 更改 PDF 字体或段落的行高 排版中的行距称为行距 如果可以使用行间距 则可以使用 Paragraph Leading 或 Paragraph LeadingMultiplier 看http itextsh
  • 如何以编程方式从 Excel 中的 VBA 宏中删除数字签名?

    有没有办法以编程方式从 Excel 工作表的 VBA 宏中删除数字签名 即相当于进入 VBA 编辑器 转到 工具 菜单 gt 数字签名 并单击 删除 的代码 有趣的问题 出于安全原因 它故意不属于 Excel 对象模型的一部分 可以从证书存
  • 是否可以“缩小”PdfPtable?

    我目前正在使用 Itextsharp 但在使用 PDfPtables 时遇到一些问题 有时 它们对于一个页面来说太大了 并且当添加到文档中时 它们会被分成多个页面 可悲的是 这种理性的行为对于我的一些上级来说是不可接受的 他们一直坚持认为表
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 使用 Itextsharp 读取本地化 PDF 文件

    我正在尝试使用 iTextSharp 阅读 PDF 文件 问题是当尝试阅读英语以外的 PDF 文件 例如印地语或阿拉伯语 时 它无法获取正确的单词 我想知道 我应该在系统上安装印地语或阿拉伯字体 还是需要对编码进行一些处理 ITextExt
  • c# itextsharp如何获取数字签名图像

    是否可以使用 C 代码使用 itextsharp 获取 pdf 文件中任何数字签名的图像 PdfReader pdf new PdfReader location pdf AcroFields acroFields pdf AcroFiel
  • c#/asp.net - 如何捕获“System.Web.HttpException:请求超时”?

    在我的 asp net c 项目中 我使用 iTextsharp dll 从许多 pdf 文档中读取文本 但有时会出现此错误 System Web HttpException 请求超时 但实现它的代码是 public static bool

随机推荐