一、前言
今天将一套PDF集成线上签字+盖章+防伪二维码+水印的一系列解决方法总结出来,写这篇博客进行开源。
二、使用itextPDF实现PDF电子公章工具类
1、电子公章的制作
推荐使用的线上做章工具来模拟电子印章》——》做章网站:395 Seal
电子公章效果如图:
PDF模板
- 生成PDF效果图
2、itextPDF的相关依赖
<!-- itextpdf依赖 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.62</version> </dependency>
- 使用的是boot项目,所以完整依赖是
-
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>Itext</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>Itext Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <repositories> <repository> <id>com.e-iceblue</id> <url>https://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId> e-iceblue </groupId> <artifactId>spire.pdf</artifactId> <version>3.6.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- itextpdf依赖 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.62</version> </dependency> <!--guava是来自Google的Java核心类库。包含了新的集合类型(例如:复合map、复合set)、 不可变集合,以及一些对于并发、I/O、hashing、缓存、原型、字符串等的通用功能。 guava被广泛使用在Google的项目中,也被广泛的使用在其他公司里。--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.0-jre</version> </dependency> <!-- 条形码、二维码生成 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.3.0</version> </dependency> </dependencies> <build> <finalName>Itext</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
3、相关配置及数字签名的配置
- 涉及到加密算法就需要数字签名了(数字签名格式,CMS,CADE),我们就需要一个文件(我的命名是:server.p12)这个东西需要我们自己电脑生成数字签名
2)java工具keytool生成p12数字证书文件
Keytool是用于管理**和证书的工具,位于%JAVA_HOME%/bin目录。
使用JDK的keytool工具:
1:在d盘创建keystore文件夹
2:进入jdk安装路径 然后到bin目录下 然后在目录上方输入cmd
3:在命令窗口执行keytool -genkeypair -alias bhl -keypass 111111 -storepass 111111 -dname "C=CN,ST=SD,L=QD,O=haier,OU=dev,CN=haier.com" -keyalg RSA -keysize 2048 -validity 3650 -keystore D:\keystore\server.keystore
4:待上面命令执行完后再执行keytool -importkeystore -srckeystore D:\keystore\server.keystore -destkeystore D:\keystore\bhl.p12 -srcalias bhl -destalias serverkey -srcstoretype jks -deststoretype pkcs12 -srcstorepass 111111 -deststorepass 111111 -noprompt
5:去keystore文件夹查看是否有.p12文件生成
4、项目结构及源码
问题记录:
1:出现加载包找不到问题例如:java: 程序包org.bouncycastle.jce.provider不存在
解决:
1:查看Java\jdk1.8.0_351\jre\lib\ext里面得是否有bcprov-jdk15on-1.62 jar包
生成签名运行效果:
post测试电子签字+盖章效果:
文件效果:
源码请私信!!!