C# / vb.net 给PDF 添加可视化和不可见数字签名
本文通过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 添加可视化和不可见数字签名的更多相关文章
- C#/VB.NET 合并PDF页面
本文以C#及vb.net代码为例介绍如何来实现合并PDF页面内容.本文中的合并并非将两个文档简单合并为一个文档,而是将多个页面内容合并到一个页面,目的是减少页面上的空白区域,使页面布局更为紧凑.合理. ...
- C# 给PDF添加图片背景
C# 给PDF添加图片背景 今天要实现的是给PDF文件添加图片背景这个功能.PDF是近年来最流行的文件之一,无论是办公还是日常生活中都经常会用到,很多时候,PDF文件的背景色都是白色,看多了难免觉得累 ...
- 用什么方法给PDF添加页眉页脚
我们所看到的书本中都会设置好有页眉页脚,那么电子书想要添加页眉页脚要怎么操作呢,用什么方法可以在PDF中添加页眉页脚呢,今天就为大家分享一下,如何在电子文件中添加页眉页脚,想知道的小伙伴们就一起来看看 ...
- 编辑技巧分享如何给PDF添加注释
纸质的文件想要添加注释就直接拿笔在上面添加就好了,那么电子文件要怎么添加注释呢,今天小编就以我们现在经常使用到的PDF文档来为大家分享怎么添加注释. 1. 我们需要在百度中搜索并下载并安装一款PD ...
- java PDF添加图层,支持多页图层添加
java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...
- 给pdf添加导航目录
给pdf添加导航目录 我们下载pdf书籍经常需要以下导航功能,没有导航的pdf根本看不下,接下来会分享我添加导航的方法 首先需要下载工具软件,链接: http://t.cn/Exyss1G 打开软件, ...
- java -PDF添加文本水印与图片水印
java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30; public static void waterMark(Stri ...
- java实现图片和pdf添加铺满文字水印
依赖jar包 <!-- pdf start --> <dependency> <groupId>com.itextpdf</groupId> <a ...
- C#/VB.NET 在PDF中添加文件包(Portfolio)
PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...
随机推荐
- 『心善渊』Selenium3.0基础 — 7、XPath轴定位详解
目录 1.XPath轴定位介绍 2.位置路径表达式概念 3.步的路径表达式范例 4.练习 使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位.例如:先找到一个相对好定位的元素,在根据与 ...
- 关于equals()和hashcode()的一些约定
本文章主要讨论和回答一下几个问题: equals()的四大特性 equals()和hashcode()之间的关系,为什么我们经常说这两个方法要么都重写,要么都不重写? HashMap.HashSet等 ...
- 03 Git 以及 其 GUI TortoiseGit 的下载与安装
前面也说过嘛,要紧跟大佬们的步伐--选择最受欢迎的版本控制系统. 而根据 [JetBrains](JetBrains: Essential tools for software developers ...
- 低代码开发LCDP,Power Apps系列 - 搭建入职选购电脑设备案例
低代码简介 上世纪八十年代,美国就有一些公司和实验室开始了可视化编程的研究,做出了4GL"第四代编程语言",到后来衍生成VPL"Visual Programming La ...
- 乘风破浪,.Net Core遇见MAUI(.NET Multi-platform App UI),进击现代化跨设备应用框架
什么是MAUI https://github.com/dotnet/maui .NET Multi-platform App UI (MAUI) 的前身是Xamarin.Forms(适用于Androi ...
- 21、linux系统grup和bios加密
21.1.grup加密(加密单用户模式): 1.使用加密算法对grup密码进行加密: 2.修改grup.conf配置文件: 21.2.bios加密(因为救援模式可以破解grup加密,所以使用bios加 ...
- Java数据库开发(二)之——DBCP连接数据库
1.载入jar包 DBCP需要以下几个jar包,可到apache及mysql的官网下载 2.程序编写 public static BasicDataSource ds = null; static f ...
- mongodb主从复制(读写分离)
1.[启动主服务器]mongod --port 1111 --dbpath D:\Program Files\Mongodb\master --logpath D:\Program Files\Mon ...
- 阿里云ECS问题 Login Incorrect , all available gssapi merchanisms failed
1.阿里云ECS无法登录 Login Incorrect 阿里云ECS密码包含2个密码: 1.重置密码(实例密码也就是我们SSH远程连接的密码): 2.修改远程连接密码(在阿里云网页控制台上远程连接的 ...
- IDEA连接数据库出现报错
解决办法 jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCComplia ...