本文通过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. Golang中GBK和UTF8编码格式互转

    Golang中GBK和UTF8编码格式互转 需求 已知byte数组的编码格式转换 实现代码 package utils import ( "bytes" "golang. ...

  2. 关于equals()和hashcode()的一些约定

    本文章主要讨论和回答一下几个问题: equals()的四大特性 equals()和hashcode()之间的关系,为什么我们经常说这两个方法要么都重写,要么都不重写? HashMap.HashSet等 ...

  3. Java操作SQL数据库(JDBC)

    0.引入驱动jar包 使用jdbc进行具体操作前,需要引入相关数据库的jar包, 或者使用mave管理依赖 <!-- https://mvnrepository.com/artifact/mys ...

  4. C#调用JAVA(一)制作jar包

    1 //AndroidJavaClass类可以理解为某一个类 2 //AndroidJavaObject类可以理解为某一个类中的一个对象 打开AS,创建一个空项目 输入项目名,包名,本地路径以及语言之 ...

  5. Kubernetes之DaemonSet

    1.DaemonSet在每个节点上运行一个pod K8s中Replicationcontroller和ReplicaSet都用于在Kubernetes集群上运行部署特定数量的pod.但是,当希望pod ...

  6. Windows10 准备/安装React研发环境

    安装NodeJS环境,附带NPM 因为React依赖NPM(Node.js Package Manager)来安装,所以我们可以先安装Node.Js环境. Node.Js会自动带NPM组件和自动安装配 ...

  7. Vsftpd虚拟用户登陆配置(Centos7)

    1 安装Vsftpd服务 # yum install vsftpd -y vsftp虚拟用户是为了保证FTP服务器的安全性,由vsftpd服务器提供的非系统用户账号, 相对于FTP的本地用户来说,虚拟 ...

  8. 【Azure API 管理】解决调用REST API操作APIM(API Management)需要认证问题(Authentication failed, The 'Authorization' header is missing)

    问题描述 在通过REST API的方式来管理APIM资源,需要调用Azure提供的management接口.而这所有的接口,都是需要有Token并且还需要正确的Token.如若不然,就会获取到如下的错 ...

  9. Linux云计算-01_介绍以及Linux操作系统安装

    1 学习目的 兴趣爱好 技能提升 找到满意的工作 2 什么是云计算 云计算(cloud computing)是分布式计算的一种,指的是通过网络"云"将巨大的数据计算处理程序分解成无 ...

  10. KDE桌面环境下konsole,kate等软件无法切换中文输入法

    解决方案(arch): 修改/etc/profile,增加以下语句: #fcitxexport XIM_PROGRAM=fcitxexport XIM=fcitxexport GTK_IM_MODUL ...