便捷!Spring Boot 3.3集成iText 实现高效PDF导出

科技   2024-11-04 07:30   河北  


便捷!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的主要特点:

  1. 易用性:提供简单易用的API,快速上手。

  2. 高性能:高效的PDF生成和处理能力。

  3. 支持HTML和CSS:支持将HTML和CSS转换为PDF格式。

  4. 丰富的功能:支持PDF的加密、数字签名、表单处理等。

  5. 灵活的布局管理:可以定制PDF文档的结构和外观。

  6. 跨平台支持:可在任何支持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生成的流程,提高了效率。


今天就讲到这里,如果有问题需要咨询,大家可以直接留言或扫下方二维码来知识星球找我,我们会尽力为你解答。


AI资源聚合站已经正式上线,该平台不仅仅是一个AI资源聚合站,更是一个为追求知识深度和广度的人们打造的智慧聚集地。通过访问 AI 资源聚合网站 https://ai-ziyuan.techwisdom.cn/,你将进入一个全方位涵盖人工智能和语言模型领域的宝藏库


作者:路条编程(转载请获本公众号授权,并注明作者与出处)


路条编程
路条编程是一个友好的社区,在这里你可以免费学习编程技能,我们旨在激励想学编程的人尝试新的想法和技术,在最短的时间学习到工作中使用到的技术!
 最新文章