一、程序运行环境

  • 编译环境:IntelliJ IDEA
  • 所需测试文件:PDF、.pfx数字证书及密钥、PDF Jar包(Free Spire.PDF for Java)、签名图片(.png格式)
  • 可信时间戳服务器:URL地址

:以下代码中的所有测试文件路径均为IDEA程序项目文件夹路径,如C:\Users\Administrator\IdeaProjects\Certificate_PDF\test.pdf,文件路径可自定义。

关于jar导入方法:2种

1.手动导入:下载jar包到本地,解压;在IDEA中,执行如下步骤导入:

2. Maven配置导入。在pom.xml中配置如下内容下载导入:

<repositories><repository><id>com.e-iceblue</id><url>http://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories>
<dependencies><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>4.4.1</version></dependency>
</dependencies>

二、程序测试代码

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 TimeStamp {public static void main(String[] args) {//加载PDF文档PdfDocument pdf = new PdfDocument();pdf.loadFromFile("test.pdf");//加载pfx证书,及证书秘钥PdfCertificate cert = new PdfCertificate("pfx证书","密钥");//添加数字签名到指定页面,并设置其位置和大小PdfSignature signature = new PdfSignature(pdf, pdf.getPages().get(2), cert, "Mia");Rectangle2D rect = new Rectangle2D.Float();rect.setFrame(new Point2D.Float((float) pdf.getPages().get(0).getActualSize().getWidth() - 340, (float) pdf.getPages().get(0).getActualSize().getHeight() - 230), new Dimension(280, 120));signature.setBounds(rect);//设置签名为图片加文本模式signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);//设置签名的内容signature.setNameLabel("签字人:");signature.setName("Manager");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);//配置时间戳服务器String timestampeServerUrl = "时间戳服务器地址";signature.configureTimestamp(timestampeServerUrl);//保存文档pdf.saveToFile("SignatureWithTimeStamp.pdf");pdf.close();}
}

时间戳效果如图:

另推荐阅读:

Java PDF数字签名(一) - 添加数字签名

Java PDF数字签名(二) - 验证签名有效性

Java PDF数字签名(三)- 添加空白签名域

Java PDF数字签名(四)——获取PDF中的数字签名信息

—End—

Java PDF数字签名(五)—Java 给PDF签名时添加可信时间戳相关推荐

  1. C# 给PDF签名时添加时间戳的2种方法(附VB.NET代码)

    在PDF添加签名时,支持vb.net教程添加可信时间c#教程戳来保证文档的法python基础教程律效应.本文,将通过C#程序代码java基础教程介绍如何添加可sql教程信时间戳,可通过2种方法来实现. ...

  2. C# 给PDF签名时添加时间戳的2种方法)

    添加签名时,这里可分别通过两个类来实现,即PdfSignature 和 PdfOrdinarySignatureMaker类.下面分别以两个代码示例展示如何签名并添加时间戳. 通过PdfSignatu ...

  3. php pdf数字签名,用PHP从PDF中检索数字签名信息

    一开始,请阅读关于AdobePDF中的数字签名的文章 其次,读完这个之后,你会知道签名被存储在b和c字节之间,根据/ ByteRange [a b c d]指示器 第三,我们可以从文档中提取b和c,然 ...

  4. Java PDF数字签名(三)- 添加空白签名域

    有时候我们需要在PDF文档中添加空白的签名域,然后发给客户,由客户签名.这篇文章将介绍如何在Java应用程序中给PDF文档添加空白的签名域. 步骤: 1.创建一个Java project,并添加一个c ...

  5. PDF中加java空白可写字段,java 在已有内容的PDF上添加空白数字签名域

    在已有内容的PDF上添加空白数字签名域 如果想根据PDF模板生成PDF请跳转 废话不多说,上代码,亲测可用. pom.xml com.itextpdf itextpdf 5.5.11 整体代码(里面的 ...

  6. java 在已有内容的PDF上添加空白数字签名域

    在已有内容的PDF上添加空白数字签名域 如果想根据PDF模板生成PDF请跳转 废话不多说,上代码,亲测可用. pom.xml <dependency><groupId>com. ...

  7. Java PDF数字签名(一) - 添加数字签名

    这篇文章将介绍如何在Java应用程序中给PDF文档添加数字签名. 使用工具: Free Spire.PDF for JAVA 步骤: 1.创建一个Java project,并添加一个class Sig ...

  8. java pdf数字签名_使用pdfbox的数字签名

    我想使用pdfbox将多个签名添加到我的pdf中,我尝试使用两个签名,而第二个签名总是变为无效.请咨询, 可以将PDF数字签名数次? Adobe生命周期论坛说是.使用pdfbox的数字签名 impor ...

  9. Java 证书 数字签名_JAVA 给PDF添加数字签名

    import com.spire.pdf.PdfDocument; import com.spire.pdf.security.*; import com.spire.pdf.graphics.*; ...

最新文章

  1. SmartNIC/DPU — 基本组成示例
  2. es like模糊匹配_es 基于match_phrase/fuzzy的模糊匹配原理及使用
  3. 【Java 虚拟机探索之路系列】:JIT编译器
  4. P6640-[BJOI2020]封印【SAM,二分】
  5. (一)elasticsearch6.1.1安装详细过程
  6. 阿里云产品头条(2018年1月刊)
  7. iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用...
  8. 将一个十六进制数的字符串参数转换成整数返回
  9. 全国电子设计大赛-电路模块准备
  10. python语言程序设计实践教程答案实验六_实验6数组程序设计答案
  11. vue的Des加密解密
  12. 利润分配计算机公式,利润与利润分配表计算公式大全
  13. 台式机计算机怎么分割,台式机如何设置分屏
  14. 全面揭露网络交易出现的十大欺诈骗术
  15. 解锁中智集团30平方米数据中心备受追捧的密码
  16. 基于java的学生学籍管理系统(含源文件)
  17. ubuntu下载神器---xdm
  18. 鼠标右键菜单跑到左边改回右边显示
  19. 《宏景国际教育》会计工作:刚刚拿到德勤 Offer,和大家分享一下求职经历
  20. linux的pci文件是哪个,Linux系统查看PCI设备信息

热门文章

  1. 基于java的电子病历管理系统ssh框架
  2. python文档相似性比较代码_Python使用gensim计算文档相似性
  3. Robocup3d比赛环境的搭建及常用函数简介
  4. win10系统文件拖拽卡顿_win10电脑中鼠标拖动窗口有延迟如何解决
  5. ios文件app访问samba服务器,ios链接samba服务器
  6. GitLab-Runner 从安装到配置到入门
  7. slides.com 导出PDF
  8. 如何将macbook触摸板和外接鼠标的滚轮设置相反方向
  9. 企业邮箱安全防盗措施
  10. Word文档误删怎样恢复?6种实用方法分享给你