itext5实现pdf文件的电子签名、签章、添加水印、文件加密

一、前言

今天将一套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测试电子签字+盖章效果:

文件效果:

源码请私信!!! 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用iText5创建一个pdf文件添加页眉,您需要按照以下步骤进行操作: 1. 首先,确保您已经将iText5添加到您的Java项目的依赖中。您可以在项目的pom.xml文件添加以下依赖项: ``` <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> ``` 2. 创建一个新的Document对象,并将其与一个PdfWriter对象关联: ```java Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); ``` 3. 创建一个PdfPageEventHelper的子类,用于处理页眉的创建: ```java class HeaderFooter extends PdfPageEventHelper { public void onEndPage(PdfWriter writer, Document document) { PdfContentByte cb = writer.getDirectContent(); Phrase header = new Phrase("这是页眉"); ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, header, (document.right() - document.left()) / 2 + document.leftMargin(), document.top() + 10, 0); } } ``` 4. 将创建的HeaderFooter对象与PdfWriter相关联: ```java HeaderFooter event = new HeaderFooter(); writer.setPageEvent(event); ``` 5. 打开Document对象并添加内容: ```java document.open(); document.add(new Paragraph("这是内容")); ``` 6. 关闭Document对象: ```java document.close(); ``` 现在,您已经成功创建了一个包含页眉的pdf文件。 参考资料: itext7 html转换为pdfiText7页码、页眉、页脚,itext 的复杂表格实现;完整springboot项目代码。 依赖: <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> 参考:https://blog.csdn.net/lcczpp/article/details/125424395<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值