Java 添加、验证PDF 数字签名
在设置文档内容保护的方法中,除了对文档加密、添加水印外,应用数字签名也是一种有效防伪手段。数字签名的文件比较容易验证,并且具有较高的权威性和可信度。在PDF文档中,有可直接添加或验证数字签名的功能方法,下面的文章中,将通过Java程序来介绍添加数字签名到PDF文档,以及验证签名是否有效。
使用工具:Spire.PDF for Java
Jar文件获取及导入方法:
方法1:可通过官网下载jar文件包。下载后,解压文件,并将lib文件夹下的Spire.Pdf.jar文件导入到Java程序。参考如下导入效果:(这里程序将jar文件分别导入了两个module)
方法2:可通过maven仓库安装导入。
Java代码示例
【示例1】添加数字签名到PDF
import com.spire.pdf.*; import com.spire.pdf.graphics.PdfImage; import com.spire.pdf.graphics.PdfTrueTypeFont; import com.spire.pdf.security.GraphicMode; import com.spire.pdf.security.PdfCertificate; import com.spire.pdf.security.PdfCertificationFlags; import com.spire.pdf.security.PdfSignature;import java.awt.*; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D;public class AddCertificate {public static void main(String[]args){//加载PDF文档PdfDocument doc = new PdfDocument();doc.loadFromFile("test.pdf");//加载pfx证书,及证书秘钥PdfCertificate cert = new PdfCertificate("Cermia.pfx","123654yes!");//添加数字签名到指定页面,并设置其位置和大小PdfSignature signature = new PdfSignature(doc, doc.getPages().get(2), cert, "MySignature");Rectangle2D rect = new Rectangle2D.Float();rect.setFrame(new Point2D.Float((float) doc.getPages().get(0).getActualSize().getWidth() - 340, (float) doc.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 150));signature.setBounds(rect);//设置签名为图片加文本模式 signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);//设置签名的内容signature.setNameLabel("签字者:");signature.setName("Mia");signature.setContactInfoLabel("联系电话:");signature.setContactInfo("02881705109");signature.setDateLabel("日期:");signature.setDate(new java.util.Date());signature.setLocationInfoLabel("地点:");signature.setLocationInfo("成都");signature.setReasonLabel("原因:");signature.setReason("文档所有者");signature.setDistinguishedNameLabel("DN: ");signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());signature.setSignImageSource(PdfImage.fromFile("sign.png"));//设置签名的字体signature.setSignDetailsFont(new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.PLAIN, 9)));//设置文档权限为禁止更改 signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);signature.setCertificated(true);//保存文档doc.saveToFile("AddSignature.pdf");doc.close();} }
数字签名添加效果:
【示例2】验证数字签名有效性
import com.spire.pdf.*; import com.spire.pdf.security.PdfSignature; import com.spire.pdf.widget.PdfFormFieldWidgetCollection; import com.spire.pdf.widget.PdfFormWidget; import com.spire.pdf.widget.PdfSignatureFieldWidget;import javax.swing.*;public class ValidateSignature {public static void main(String[]args){//创建PdfDocument实例PdfDocument doc = new PdfDocument();//加载含有签名的PDF文件doc.loadFromFile("SignnedFile.pdf");//获取域集合PdfFormWidget pdfFormWidget = (PdfFormWidget) doc.getForm();PdfFormFieldWidgetCollection pdfFormFieldWidgetCollection = pdfFormWidget.getFieldsWidget();//遍历域for (int i = 0; i < pdfFormFieldWidgetCollection.getCount(); i++) {//判定是否为签名域if (pdfFormFieldWidgetCollection.get(i) instanceof PdfSignatureFieldWidget) {//获取签名域PdfSignatureFieldWidget signatureFieldWidget = (PdfSignatureFieldWidget) pdfFormFieldWidgetCollection.get(i);//获取签名PdfSignature signature = signatureFieldWidget.getSignature();//判定签名是否有效boolean result = signature.verifySignature();if (result) {String str1 =" 有效签名";JOptionPane.showMessageDialog(null,str1);} else {String str2 =" 无效签名";JOptionPane.showMessageDialog(null,str2);}}}} }
验证结果:
扩展:Java 添加签名域到PDF,可以参考这篇文章。
(本文完)
转载于:https://www.cnblogs.com/Yesi/p/11271058.html
Java 添加、验证PDF 数字签名相关推荐
- Java PDF数字签名(五)—Java 给PDF签名时添加可信时间戳
一.程序运行环境 编译环境:IntelliJ IDEA 所需测试文件:PDF..pfx数字证书及密钥.PDF Jar包(Free Spire.PDF for Java).签名图片(.png格式) 可信 ...
- java pdf数字签名_使用pdfbox的数字签名
我想使用pdfbox将多个签名添加到我的pdf中,我尝试使用两个签名,而第二个签名总是变为无效.请咨询, 可以将PDF数字签名数次? Adobe生命周期论坛说是.使用pdfbox的数字签名 impor ...
- Java 添加、替换、删除PDF中的图片
本文介绍通过java程序向PDF文档添加图片,以及替换和删除PDF中已有的图片. 工具: Free Spire.PDF for Java (免费版) Jar获取及导入:官网下载,并解压将lib文件夹下 ...
- java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印
接上一篇,pdf跟tif 是一起做的 java实现 1.给PDF文件添加图片水印: public static void waterMark1(String inputFile,String outp ...
- pdf删除图层_在Java中以PDF添加和删除图层
pdf删除图层 PDF层允许用户有选择地隐藏或显示PDF文档中出现在其上的内容. 在本文中,我们将介绍如何使用Free Spire.PDF for Java库在Java文档中添加图层,在图层中绘制内容 ...
- Java 添加PDF印章——图片印章、动态印章
图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门机关权威的重要指示物,常见于各种格式的文件.文档中.对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现.本篇文档分享通过 ...
- Java自动生成PDF并进行邮件群发
这段时间,公司承办一个互联网峰会,需要对4000多位客户发送邀请函,其中包括一个pdf文件和一封手写信,PDF中将从公司数据库中读取所有客户姓名,自动生成到相应位置,前期尝试Java自动生成pdf文件 ...
- Java实现给PDF文件加文字水印和图片水印(可以自定义水印格式)
使用Java代码给PDF文件加文字水印 直接上代码运行即可 依赖 有的可能用不上我直接复制全部了 <dependencies><!--word文件转PDF以及水印-->< ...
- java itext 导出pdf文件_【Java,PDF】使用Itext实现PDF文件生成
重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 前言 有时候,业务系统要求提供一个PDF文件导出的功能,这时候我们就需要将数据库的对应数据查询出来,然后生成 ...
- Scott Mitchell 的ASP.NET 2.0数据教程之三十九:: 在编辑和插入界面里添加验证控件...
原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 导言 到目前为止的讨论编辑DataList的教程里,没有包含任何验证用户的输入,即使是用户非法输入- 遗漏了product的name或者负的 ...
最新文章
- C#游戏开发快速入门2.2改变游戏对象的状态
- python【蓝桥杯vip练习题库】ADV-350珠心算测验
- 解决git无法clone地址为https的库
- scvmm2008R2创建委派管理员角色
- table: github.com/astaxie/beego/orm.Ormer not found
- 湛江高考2021成绩查询,2021广东省高中学业水平考试成绩查询(入口+方式)
- Java8的产品周期_java8的时间和`Date`的对比
- Qt工作笔记-对*QObject::sender()的认识
- 有长度要求的区间最大值
- 那些我在Android开发中所喜爱的Kotlin特性
- 11.3 帧中继基本配置
- 使用外网访问Flask项目
- Gromacs 中文手册目录
- 阿里云搭建大数据平台(9):kafka安装部署和测试
- java求2到100内的素数_java学习日记-基础-列出2~100内的素数
- Android5.0框架层短信接收过程分析
- JavaWeb中外部引入的js中涉及到location.href的页面跳转/jsp页面的外部js文件引入
- c语言转义字符(c语言转义字符是什么意思)
- cad 打开硬件加速卡_谁说没有核显就不能开启硬件加速?手把手教你开启加速
- 模块regsvr32 c:\Windows\SysWOW64\comdlg32.ocx 加载失败