本文通过C#程序代码展示如何给PDF文档添加可视化数字签名和不可见数字签名。可视化数字签名,即在PDF文档中的指定页面位置添加签名,包含相关文字信息和签名图片等;不可见数字签名,即添加签名时不在文档中指定签名位置,在文档正文中不显示相关数字签名信息。

这里签名是通过PdfOrdinarySignatureMaker类提供的的接口来实现签名,在添加可视化签名时,通过IPdfSignatureAppearance类提供的接口来设置签名的具体位置,签名图片等。

下面是具体实现方法和步骤,供参考。

1. 在VS程序中通过Nuget安装 Spire.PDF for .NET 版本7.8.2,安装步骤如下:

鼠标右键点击“引用”,“管理Nuget包”

点击“浏览”,在搜索框中输入“Spire.PDF ”,点击选择搜索到的包,点击“安装”。

在弹出的窗口点击“OK”

等待安装完成。安装结果如图:

2.在VS程序中添加如下代码添加数字签名

 2.1 添加可视化数字签名

  C#

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Interactive.DigitalSignatures;
using System.Drawing;
using System.Security.Cryptography.X509Certificates; namespace VisibleDigitalSignature
{
class Program
{
static void Main(string[] args)
{
//加载PDF测试文档
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("test.pdf"); //获取PDF文档中的第5页
PdfPageBase page = pdf.Pages[4]; //在页面中的指定位置添加可视化签名
X509Certificate2 x509 = new X509Certificate2("cer.pfx", "e-iceblue");
PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(pdf, x509);
IPdfSignatureAppearance signatureAppearance = new PdfCustomSignatureAppearance();
signatureMaker.MakeSignature("signName_" , page, page.ActualSize.Width-240,page.ActualSize.Height-200,150,150, signatureAppearance); //保存文档
pdf.SaveToFile("VisibleDigitalSignature.pdf", FileFormat.PDF);
System.Diagnostics.Process.Start("VisibleDigitalSignature.pdf");
pdf.Close(); }
public class PdfCustomSignatureAppearance : IPdfSignatureAppearance
{
public void Generate(PdfCanvas g)
{
float fontSize = 15;
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", fontSize), true);
float lineHeight = fontSize; g.DrawString("Sign Here:", font, PdfBrushes.Black, new PointF(0, 0));
g.DrawImage(PdfImage.FromFile("sign.png"), new PointF(20, 20));
}
} }
}

Vb.net

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Interactive.DigitalSignatures
Imports System.Drawing
Imports System.Security.Cryptography.X509Certificates Namespace VisibleDigitalSignature
Class Program
Private Shared Sub Main(args As String())
'加载PDF测试文档
Dim pdf As New PdfDocument()
pdf.LoadFromFile("test.pdf") '获取PDF文档中的第5页
Dim page As PdfPageBase = pdf.Pages(4) '在页面中的指定位置添加可视化签名
Dim x509 As New X509Certificate2("cer.pfx", "e-iceblue")
Dim signatureMaker As New PdfOrdinarySignatureMaker(pdf, x509)
Dim signatureAppearance As IPdfSignatureAppearance = New PdfCustomSignatureAppearance()
signatureMaker.MakeSignature("signName_", page, page.ActualSize.Width - 240, page.ActualSize.Height - 200, 150, 150, _
signatureAppearance) '保存文档
pdf.SaveToFile("VisibleDigitalSignature.pdf", FileFormat.PDF)
System.Diagnostics.Process.Start("VisibleDigitalSignature.pdf")
pdf.Close() End Sub
Public Class PdfCustomSignatureAppearance
Implements IPdfSignatureAppearance
Public Sub Generate(g As PdfCanvas)
Dim fontSize As Single = 15
Dim font As New PdfTrueTypeFont(New Font("Arial", fontSize), True)
Dim lineHeight As Single = fontSize
g.DrawString("Sign Here:", font, PdfBrushes.Black, New PointF(0, 0))
g.DrawImage(PdfImage.FromFile("sign.png"), New PointF(20, 20))
End Sub
End Class End Class
End Namespace

可视化数字签名效果:

   2.2 添加不可见数字签名

    C#

using Spire.Pdf;
using Spire.Pdf.Interactive.DigitalSignatures;
using System.Security.Cryptography.X509Certificates; namespace InvisibleDigitalSignature
{
class Program
{
static void Main(string[] args)
{
//初始化一个PdfDocument实例
PdfDocument pdf = new PdfDocument(); //加载PDF文档
pdf.LoadFromFile("test.pdf"); //添加签名
X509Certificate2 x509 = new X509Certificate2("cer.pfx", "e-iceblue");
PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(pdf, x509);
signatureMaker.MakeSignature("signName");
signatureMaker.SetLocation("Chengdu");
signatureMaker.SetReason("Edit limited"); //保存文档
pdf.SaveToFile("result.pdf", FileFormat.PDF);
System.Diagnostics.Process.Start("result.pdf");
}
}
}

Vb.net

Imports Spire.Pdf
Imports Spire.Pdf.Interactive.DigitalSignatures
Imports System.Security.Cryptography.X509Certificates Namespace InvisibleDigitalSignature
Class Program
Private Shared Sub Main(args As String())
'初始化一个PdfDocument实例
Dim pdf As New PdfDocument() '加载PDF文档
pdf.LoadFromFile("test.pdf") '添加签名
Dim x509 As New X509Certificate2("cer.pfx", "e-iceblue")
Dim signatureMaker As New PdfOrdinarySignatureMaker(pdf, x509)
signatureMaker.MakeSignature("signName")
signatureMaker.SetLocation("Chengdu")
signatureMaker.SetReason("Edit limited") '保存文档
pdf.SaveToFile("result.pdf", FileFormat.PDF)
System.Diagnostics.Process.Start("result.pdf")
End Sub
End Class
End Namespace

不可见数字签名效果:

—End—

C# / vb.net 给PDF 添加可视化和不可见数字签名的更多相关文章

  1. C#/VB.NET 合并PDF页面

    本文以C#及vb.net代码为例介绍如何来实现合并PDF页面内容.本文中的合并并非将两个文档简单合并为一个文档,而是将多个页面内容合并到一个页面,目的是减少页面上的空白区域,使页面布局更为紧凑.合理. ...

  2. C# 给PDF添加图片背景

    C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...

  3. 用什么方法给PDF添加页眉页脚

    我们所看到的书本中都会设置好有页眉页脚,那么电子书想要添加页眉页脚要怎么操作呢,用什么方法可以在PDF中添加页眉页脚呢,今天就为大家分享一下,如何在电子文件中添加页眉页脚,想知道的小伙伴们就一起来看看 ...

  4. 编辑技巧分享如何给PDF添加注释

    纸质的文件想要添加注释就直接拿笔在上面添加就好了,那么电子文件要怎么添加注释呢,今天小编就以我们现在经常使用到的PDF文档来为大家分享怎么添加注释.   1. 我们需要在百度中搜索并下载并安装一款PD ...

  5. java PDF添加图层,支持多页图层添加

     java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...

  6. 给pdf添加导航目录

    给pdf添加导航目录 我们下载pdf书籍经常需要以下导航功能,没有导航的pdf根本看不下,接下来会分享我添加导航的方法 首先需要下载工具软件,链接: http://t.cn/Exyss1G 打开软件, ...

  7. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30; public static void waterMark(Stri ...

  8. java实现图片和pdf添加铺满文字水印

    依赖jar包 <!-- pdf start --> <dependency> <groupId>com.itextpdf</groupId> <a ...

  9. C#/VB.NET 在PDF中添加文件包(Portfolio)

    PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...

随机推荐

  1. 通过Cloudflare API进行CDN刷新

    1.Cloudflare CDN刷新说明 1.Cloudfalre同Akamai一样,只有刷新,没有预热的概念. 2.通过Cloudflare API进行刷新,需要用到登录用户的[邮箱][api密钥] ...

  2. 多元统计之因子分析模型及Python分析示例

    1. 简介 因子分析是一种研究观测变量变动的共同原因和特殊原因, 从而达到简化变量结构目的的多元统计方法. 因子分析模型是主成分分析的推广, 也是利用降维的思想, 将复杂的原始变量归结为少数几个综合因 ...

  3. <c:out>标签不能正确输出value中的值

    问题: 我打算在jsp中输出request中的值,它的key为username, <c:out value="${requestScope.username}"/> 但 ...

  4. Archive for required library:’ WebRoot/WEB-INF/Mytag.tld’in project ‘TagTest’ cannot be read or is not a valid ZIP file

    Description::部署tld文件时报错 我的解决方法: 右击(当前项目)->Build Path->Java Build Path ( Configure Build Path.. ...

  5. Java实验项目三——简单工厂模式

    Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...

  6. Windows 上连接蓝牙耳机

    "开始"菜单 –> 输入蓝牙 点击蓝牙设备,选择连接设备即可.

  7. 输出数组中出现次数最多且值最大的数字----python

    class Solution(): #求最多的数 def find_max(self,list): num = 0 for i in list: print(i) if list.count(i) & ...

  8. windows下命令

    shutdown -s -t 0 关机 shutdown -r -t 0 重启 mstsc 远程桌面 notepad 记事本 regedit 注册表 calc 计算器 start applicatio ...

  9. 前端-Vue基础3(父子组件交互)

    1.子组件往父组件传值 点击子组件的值,子组件自增,父组件的值也跟着自增 通过:this.$emit('change')方法向父组件暴露事件,在子组件中引用,可以调用父组件的方法 点击子组件触发cli ...

  10. CSS从入门到喜欢,从喜欢到着魔

    如果把网页比作一个人的话,html就是他的骨架,而css是他的皮肤,javascript是神经控制着行动.html,css,javascript都是构建网页的核心技术. CSS简介 css指的是层叠样 ...