搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
你好赵伟
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Harmonyos 自定义下拉列表框(select)_harmonyos 下拉列表
2
2024年AI辅助研发:科技变革的引擎
3
软测面试了一个00后,绝对能称为是内卷届的天花板_内卷届天花板
4
flutter获取屏幕宽高和某个控件 的宽高_flutter 获取控件宽度
5
AI短视频制作:创意与技术的完美结合_ai视频创作优势分析
6
Grafa基础:Plugin安装_grafana failed to install plugin
7
mysql Navicat通过代理链接数据库
8
微信小程序实现 登录 退出功能 以及简单的我的页面附上源代码拷贝直接用_微信小程序我的页面登录界面跳转到我的界面代码
9
c++用归并排序计算右侧小于当前元素个数_c++ 计算右侧小于当前元素的个数 归并排序
10
mysql报错函数_MySQL十大报错函数
当前位置:
article
> 正文
对PDF进行数字签名和文档加密_java pdf文件添加电子签名后能否设置文档密码
作者:你好赵伟 | 2024-03-07 01:35:34
赞
踩
java pdf文件添加电子签名后能否设置文档密码
博客分类:
PDF
Java代码
try
{
PdfReader reader =
null
;
reader =
new
PdfReader(domainDoc.getDoc());
ByteArrayOutputStream byteOut =
new
ByteArrayOutputStream();
com.itextpdf.text.Document document =
new
com.itextpdf.text.Document();
PdfCopy copy =
new
PdfCopy(document, byteOut);
document.open();
int
pageNum = reader.getNumberOfPages();
pageNum = pageNum - getSignPages(reader);
// check sign pages
for
(
int
page =
0
; page < pageNum;) {
copy.addPage(copy.getImportedPage(reader, ++page));
}
Rectangle pageRectangle = reader.getPageSize(pageNum);
ByteArrayInputStream signStream =
new
ByteArrayInputStream(signatureTemplete2PDF(pageRectangle, domainDoc, activities));
PdfReader signTempleteReader =
new
PdfReader(signStream);
int
signPageSize = signTempleteReader.getNumberOfPages();
for
(
int
page =
0
; page < signPageSize;) {
copy.addPage(copy.getImportedPage(signTempleteReader, ++page));
}
document.close();
// eSign PDF document
ByteArrayInputStream byteIn =
new
ByteArrayInputStream(byteOut.toByteArray());
PdfReader encryptReader =
new
PdfReader(byteIn);
ByteArrayOutputStream encryptByteOut =
new
ByteArrayOutputStream();
//
String jksPath = Environments.getClassPath(properties.getProperty(
"store.path"
));
String keyStorePass = properties.getProperty(
"store.password"
);
String keyPass = properties.getProperty(
"key.password"
);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(
new
FileInputStream(jksPath), keyStorePass.toCharArray());
// 获取私钥
String alias = (String) ks.aliases().nextElement();
PrivateKey key = (PrivateKey) ks.getKey(alias, keyPass.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
PdfStamper stamper = PdfStamper.createSignature(encryptReader, encryptByteOut,
'\0'
);
// 进行数字签名
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setCrypto(key, chain,
null
, PdfSignatureAppearance.WINCER_SIGNED);
appearance.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED);
appearance.setReason(
"BGL.Digital Signature "
);
appearance.setLocation(
"AU"
);
stamper.getWriter().setCompressionLevel(
5
);
// 使用私钥对文档进行加密,并且只允许打印选项
stamper.setEncryption(
null
, Utils.md5(keyStorePass).getBytes(), PdfWriter.ALLOW_PRINTING,
PdfWriter.ENCRYPTION_AES_256);
// log.info("status:"+domainDoc.getStatus());
// add watermark when signing has been completed by all required signatories.
if
(domainDoc.getStatus().equals(DocumentStatus.SIGNED)) {
// 添加水印
addWatermark(stamper, pageRectangle, pageNum,
"Digitally Signed on "
+ Utils.formatDate(
new
Date()));
}
// add signature metadata
//HashMap<String, String> info = reader.getInfo();
// stamper.setMoreInfo(info);
stamper.close();
InputStream is =
new
ByteArrayInputStream(encryptByteOut.toByteArray());
return
is;
}
catch
(DocumentException e) {
log.error(e, e);
throw
new
ElectronicSignaturesException(e);
}
catch
(IOException e) {
log.error(e, e);
throw
new
ElectronicSignaturesException(e);
}
catch
(Exception e) {
log.error(e, e);
throw
new
ElectronicSignaturesException(e);
}
http://fanchi.iteye.com/blog/1151000
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/你好赵伟/article/detail/202783
推荐阅读
article
解决使用
Mybatis
出现Invalid
value
type
for
attribute
‘fac...
在springboot中使用
Mybatis
出现Invalid
value
type
for
attribute
'fac...
赞
踩
article
java
ssm
项目
_
SSM
项目
整合基本步骤...
SSM
项目
整合1、基本概念1.1、SpringSpring是一个开源框架,Spring是于2003年兴起的一个轻量级的 ...
赞
踩
article
ssm
毕设
项目
毕业设计
过程管理系统
049a8
(
java
+VUE+Mybatis+
Maven
+Mysq...
Jdk1.8 + Tomcat8.5 +
Mysql
+ HBuilderX(Webstorm也行)+ Eclispe(...
赞
踩
article
java
-初级项目实战-(
swing
篇)-羊了个羊(动态交互
,
)...
判断t方格是否压住b方格
,
就要保证t方格的左上的黑点始终在蓝框内。即t的 x坐标(x1
,
x2)之间
,
y(y1
,
y2)之间...
赞
踩
article
JAVA
spring
-
integration
-
mqtt
配置接收字节流_
java
如何解析
mqtt
返...
引子:最近在做物联网这一块,需求是根据传感器推送过来的
数据
,动态实时展示到前端页面由于没做过这一块,之前只搭建过
mqtt
...
赞
踩
article
mqtt
协议实现
java
服务端
推送
功能(二)
java
demo
测试
...
上一篇写了安装mosQuitto和
测试
,但是用cmd命令很麻烦,有没有一个可视化软件呢? 有,需要在google浏览器下...
赞
踩
article
错误解决
error
while
loading
shared
libraries: libXXX.s...
分析原因:ld提示找不到库文件,而库文件就在当前目录中。 链接器ld默认的目录是/lib和/usr/lib,如果放在其他...
赞
踩
article
java
web
应用调用
python
机器学习
训练
的
模型
_
python
训练
的机器
模型
可以用到
java
中...
java
web
应用调用
python
机器学习
训练
的
模型
项目线上平台是用
java
编写的
web
应用程序,而深度学习使用的是p...
赞
踩
article
java
ee 笔记_
parserequest
arraysize
...
=============JSP=============== cookies生存期限就到你关闭浏览器为止 cooki...
赞
踩
article
java
Spring
定时
任务
的几种实现_
java
中
spring
项目
定时
任务
...
Spring
定时
任务
的几种实现近日项目开发
中
需要执行一些
定时
任务
,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此...
赞
踩
article
java
定时
spring
_
Spring
的
定时
任务...
最近做项目遇到
定时
器,查了一些资料,总结一下用法以备忘!1.Java TimerJava
定时
器要用到
java
.util这...
赞
踩
article
Java SpringBoot集成阿里云短信与邮件服务_
<
<
em>dependency
<
/em>>
<
<
em>groupid
<
/em>>...
1.pom.xml导入jar包
<
!--阿里云短信 -->
<
<
em>dependency
<
/em>>
<
groupId>
<
em>com
<
/em>....
赞
踩
article
Java
cxf
集成
第三方
WebService
接口_
java
cxf
调用
第三方
webservice
...
一、pom引入
org.apache.
cxf
...
赞
踩
article
Java
(
SpringBoot
2
.
x
)使用POI导入数据到
E
x
cel
_poi4.1.
2
和 spri...
一、前言最近做一个推送服务将系统某些报表,通过邮件附件的形式推送给指定的人,首先我们需要在服务端生成报表的e
x
cel文档...
赞
踩
article
Java
SpringBoot
集成
微信
告警
推送
服务_
springboot
+定时任务+
微信
告警
...
一.申请
微信
告警
模板登录
微信
公众号平台,在服务里面找到模板消息我们点击从模板库中添加一个模板消息可以通过关键字搜索
告警
模...
赞
踩
article
十五届
蓝桥杯
第三期
模拟赛题单(
C++
、
java
、
Python
)_求 1234567890123456...
十五届
蓝桥杯
第三期
模拟赛题单(
C++
、
java
、
Python
)_求 12345678901234567890123456...
赞
踩
article
十五届
蓝桥
杯
第二期模拟赛题单(C++、
java
、
Python
)_
蓝桥
杯
灌水...
十五届
蓝桥
杯
第二期模拟赛题单(C++、
java
、
Python
)_
蓝桥
杯
灌水
蓝桥
杯
灌水 备战202...
赞
踩
article
Exception
in
thread
“
ma
in
“
java
.
lang
.NoClassDefFou...
Load
in
g class `com.mysql.jdbc.Driver'. This is deprecated. T...
赞
踩
article
【
Java
】
数据类型
与
变量
...
在
Java
中
数据类型
主要分为两类:基本
数据类型
和引用
数据类型
。基本
数据类型
有四类八种:在程序中,除了有始终不变的常量外,...
赞
踩
article
15
. JAVA
反射
机制 Part 1(
Class
类
、
反射
、
反射
机制) ----- 学习笔记_禁止...
本章目标:
15
.1 认识
Class
类
15
.2
Class
类
的
使用
_禁止
直接
使用
外部
数据
作为
反射
操作
中的
类
名
/方法
名
禁止直...
赞
踩
相关标签
mybatis
java
sql
java ssm项目
vue.js
开发语言
spring
开发工具
网络
linux
库
java ee
java笔记
srping
quartz
task
java 定时 spring
cxf
webservice
spring boot
springboot
poi
excel