便捷!Spring Boot 3.3集成iText 实现高效PDF导出
在现代企业应用中,PDF文档的生成与处理变得越来越重要。Spring Boot结合iText框架,使得PDF导出变得更加高效和便捷。本文将详细介绍如何在Spring Boot 3.3项目中集成iText,实现通过HTML模板生成PDF文件,并将其保存到本地,最后提供下载链接。
运行效果:
若想获取项目完整代码以及其他文章的项目源码,且在代码编写时遇到问题需要咨询交流,欢迎加入下方的知识星球。
iText框架介绍
iText是一个开源的Java PDF库,能够轻松地创建和操作PDF文档。它提供了丰富的API,支持生成复杂的PDF文件、处理表单、加密、数字签名等功能。iText广泛应用于企业级应用中,能够有效地提高PDF文件的生成效率和质量。
iText的主要特点:
易用性:提供简单易用的API,快速上手。
高性能:高效的PDF生成和处理能力。
支持HTML和CSS:支持将HTML和CSS转换为PDF格式。
丰富的功能:支持PDF的加密、数字签名、表单处理等。
灵活的布局管理:可以定制PDF文档的结构和外观。
跨平台支持:可在任何支持Java的环境中运行。
项目结构
在开始之前,先了解一下我们项目的结构:
src
└── main
├── java
│ └── com
│ └── icoderoad
│ └── itextpdf
│ ├── controller
│ │ └── IndexController.java
│ │ └── PdfController.java
│ ├── entity
│ │ └── User.java
│ ├── service
│ │ └── PdfService.java
│ └── config
│ └── PdfProperties.java
│ └── WebConfig.java
└── resources
├── static
│ └── user_info.pdf
├── templates
│ └── user_info.html
└── fonts
└── simfang.ttf
文件描述
controller/PdfController.java
:处理PDF导出的HTTP请求。config/PdfProperties.java
:读取PDF相关的配置信息。service/PdfService.java
:实现PDF生成逻辑,包含Thymeleaf模板渲染。entity/User.java
:用户实体类,包含用户的基本信息。resources/application.yaml
:应用程序的配置文件,定义PDF导出所需的属性。resources/fonts/simfang.ttf
:中文字体文件,用于PDF中显示中文内容。resources/templates/user_info.html
:Thymeleaf模板,定义PDF内容的HTML结构。pom.xml
:Maven项目的配置文件,包含依赖项和构建设置。
添加依赖
在pom.xml
中添加iText和Lombok依赖:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.icoderoad</groupId>
<artifactId>itextpdf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>itextpdf</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.4</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>5.0.5</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>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件
在application.yaml
中,定义PDF导出相关配置:
pdf:
title: "导出用户信息PDF示例"
author: "路条编程"
创建配置类
我们创建一个配置类,读取application.yaml
中的配置:
package com.icoderoad.itextpdf.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import lombok.Data;
@Data
@Component
@ConfigurationProperties(prefix = "pdf")
public class PdfProperties {
private String title;
private String author;
}
创建实体类
更新实体类,增加邮箱、手机号和网址属性:
package com.icoderoad.itextpdf.entity;
import lombok.Data;
@Data
public class User {
private String name;
private int age;
private String email;
private String phone;
private String website;
}
创建服务类
在服务类中,我们将实现PDF导出的逻辑,并设置中文字体:
创建控制器
控制器将处理HTTP请求并调用服务类来生成PDF:
package com.icoderoad.itextpdf.controller;
import com.icoderoad.itextpdf.entity.User;
import com.icoderoad.itextpdf.service.PdfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
public class PdfController {
@Autowired
private PdfService pdfService;
@PostMapping("/export/pdf")
public String exportPdf(@RequestBody User user) throws IOException {
String filePath = "src/main/resources/static/user_info.pdf";
pdfService.createPdf(user, filePath);
return "/static/user_info.pdf"; // 返回下载链接
}
}
HTML模板
在 src/main/resources/templates/user_info.html 中定义用户信息的HTML模板:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户信息</title>
</head>
<body>
<h1 th:text="${title}"></h1>
<h2 th:text="${author}"></h2>
<table border="1">
<tr>
<td>姓名</td>
<td th:text="${name}"></td>
</tr>
<tr>
<td>年龄</td>
<td th:text="${age}"></td>
</tr>
<tr>
<td>邮箱</td>
<td th:text="${email}"></td>
</tr>
<tr>
<td>手机号</td>
<td th:text="${phone}"></td>
</tr>
<tr>
<td>网址</td>
<td th:text="${website}"></td>
</tr>
</table>
</body>
</html>
注意:部分示例代码未展示,若需获取完整案例代码,请加入下方的知识星球。
总结
通过以上步骤,大家可以在Spring Boot项目中实现通过HTML模板生成PDF文档,并将其保存到本地。用户提交信息后,系统将生成PDF并提供下载链接。这种方式简化了PDF生成的流程,提高了效率。