Spring Boot 整合 x-easypdf:5 分钟搞定 PDF 生成与中文排版

简介: 在 Java 开发中,生成 PDF 文档常面临中文乱码、排版困难、依赖库收费等痛点。本文推荐一款基于 PDFBox 深度封装的国产开源神器 —— x-easypdf。它内置中文字体,API 简洁易用,支持组件化开发。本文将通过一个“企业录用通知书生成器”的实战 Demo,带你体验 5 分钟快速实现 PDF 生成的全过程。

Spring Boot 整合 x-easypdf:5 分钟搞定 PDF 生成与中文排版

摘要:在 Java 开发中,生成 PDF 文档常面临中文乱码、排版困难、依赖库收费等痛点。本文推荐一款基于 PDFBox 深度封装的国产开源神器 —— x-easypdf。它内置中文字体,API 简洁易用,支持组件化开发。本文将通过一个“企业录用通知书生成器”的实战 Demo,带你体验 5 分钟快速实现 PDF 生成的全过程。

声明:本文内容基于 x-easypdf v3.5.5 版本编写,仅代表个人使用心得。如需最新 API 文档及技术支持,请以 x-easypdf 官网 为准。本文代码仅供学习参考,生产环境请根据实际需求调整。


作为一名 Java 程序员,你是否曾被 PDF 生成的需求折磨得痛不欲生?

  • 坐标计算繁琐,调整一个表格的边距要重启项目十几次。
  • 中文乱码问题像幽灵一样,本地好了,服务器上又挂了。
  • 官方文档晦涩难懂,API 复杂得像在解微积分。

如果你也有这些痛点,那么今天我要推荐的这款开源神器 —— x-easypdf,绝对能拯救你的发际线。

官网地址:https://x-easypdf.cn/


为什么要选择 x-easypdf?

在 Java 生态中,生成 PDF 通常有几种选择:iText、PDFBox、JasperReports 等。但它们要么收费(iText),要么过于底层(PDFBox),要么配置繁琐(JasperReports)。

x-easypdf 的出现,填补了“简单易用”与“功能强大”之间的空白。

核心优势

  1. 极简 API 设计:基于 PDFBox 深度封装,无需关注底层坐标和流操作,全部采用声明式组件调用。
  2. 天然支持中文:内置华为鸿蒙字体等中文字体,彻底告别中文乱码和字体缺失的烦恼,开箱即用。
  3. 丰富组件:内置文本域、表格、图像、条形码、二维码等常用组件,满足 99% 的业务需求。
  4. 完全开源免费:基于 MulanPSL2 协议(兼容 Apache 2.0),个人和企业均可免费使用。

适合场景与人群

适合人群

  • 需要快速上线 PDF 功能的 Java 后端开发。
  • 厌倦了计算坐标和调试样式的全栈开发。

典型场景

  • 电子合同/协议:动态填充用户信息,生成法律效力的文档。
  • 发票/收据:格式固定,内容动态的票据生成。
  • 报表导出:将数据以图文并茂的形式导出为 PDF。
  • 录用通知书 (Offer Letter):HR 系统自动生成个性化 Offer。

与其他框架对比

特性 PDFBox (原生) iText 7 x-easypdf
上手难度 高 (需懂 PDF 规范) 极低 (组件化)
中文支持 需手动加载字体 需额外配置 内置支持
API 风格 绘图式 (坐标) 声明式 声明式 + 链式
开源协议 Apache 2.0 AGPL/商业授权 MulanPSL2 (友好)
表格支持 极难实现 强大 简单易用

实战演示:5 分钟实现“录用通知书”生成器

为了让你直观感受它的强大,我写了一个简单的 Demo。这是一个录用通知书生成器,前端输入信息,后端实时生成 PDF 下载。

1. 引入依赖 (Maven)

在你的 Spring Boot 3 项目的 pom.xml 中加入以下依赖。注意我们使用的是基于 PDFBox 的模块,版本为 3.5.5

<!-- x-easypdf pdfbox 模块 -->
<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>x-easypdf-pdfbox</artifactId>
    <version>3.5.5</version>
</dependency>

2. 核心代码实现

看看生成一个包含标题和正文的 PDF 有多简单。你不需要计算 (x, y) 坐标,只需要告诉它“居中”、“字号”即可。

package com.ttk.demo.service.impl;

import com.ttk.demo.dto.OfferRequest;
import com.ttk.demo.service.PdfService;
import org.dromara.pdf.pdfbox.core.base.Document;
import org.dromara.pdf.pdfbox.core.base.Page;
import org.dromara.pdf.pdfbox.core.component.Textarea;
import org.dromara.pdf.pdfbox.core.enums.HorizontalAlignment;
import org.dromara.pdf.pdfbox.handler.PdfHandler;
import org.springframework.stereotype.Service;

import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

@Service
public class PdfServiceImpl implements PdfService {
   

    @Override
    public byte[] generateOfferPdf(OfferRequest request) {
   
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
   

            // 1. 创建文档并设置字体 (内置微软雅黑/鸿蒙字体,直接支持中文)
            Document document = PdfHandler.getDocumentHandler().create();
            document.setFontName("微软雅黑");

            // 2. 创建页面
            Page page = new Page(document);

            // 3. 创建标题组件
            Textarea title = new Textarea(page);
            title.setText("录用通知书");
            title.setFontSize(30F);
            title.setFontColor(Color.DARK_GRAY);
            // 水平居中,无需计算页面宽度
            title.setHorizontalAlignment(HorizontalAlignment.CENTER);
            title.setMarginTop(50F);
            title.render();

            // 4. 创建正文组件 (自动换行)
            String bodyText = String.format("亲爱的 %s:\n\n" +
                    "我们非常高兴地通知您,您已被录用为我们公司的 %s。\n" +
                    "您的起薪为 %s。\n" +
                    "我们期待您在 %s 入职。\n\n" +
                    "诚挚地,\n" + 
                    "人力资源部", 
                    request.getName(), request.getPosition(), request.getSalary(), request.getDate());

            Textarea body = new Textarea(page);
            body.setText(bodyText);
            body.setFontSize(14F);
            body.setMarginTop(150F);
            body.setMarginLeft(50F);
            body.setMarginRight(50F); // 设置右边距,防止文字超出
            body.setLeading(25F);     // 设置行间距,增加可读性
            body.render();

            // 5. 添加页面并保存
            document.appendPage(page);
            document.save(outputStream);
            document.close();

            return outputStream.toByteArray();

        } catch (IOException e) {
   
            throw new RuntimeException("生成 PDF 失败", e);
        }
    }
}

3. 效果展示

前端页面简洁干练,输入信息后点击下载,一份排版精美的 PDF 就生成好了。

image.png
image.png


总结

x-easypdf 真正做到了“把复杂留给自己,把简单留给用户”。如果你正在寻找一个轻量级、高性能且对中文友好的 Java PDF 解决方案,它绝对是目前的不二之选。

赶紧去 官网 体验一下吧,相信你会爱上它的!

目录
相关文章
|
Java API Apache
使用 Apache PDFBox 操作PDF文件
Apache PDFBox库是一个开源的Java工具,专门用于处理PDF文档。它允许用户创建全新的PDF文件,编辑现有的PDF文档,以及从PDF文件中提取内容。此外,Apache PDFBox还提供了一些命令行实用工具。
2425 6
Springboot 导出word,动态填充表格数据
Springboot 导出word,动态填充表格数据
|
3月前
|
消息中间件 NoSQL Java
拒绝频繁写库!SpringBoot 整合 BufferTrigger 实现高性能“流量聚合”
本文介绍如何用SpringBoot整合BufferTrigger实现高性能流量聚合,解决高并发下频繁写库的痛点。通过快手开源的BufferTrigger组件,可将大量数据库操作合并为批量执行,显著提升I/O效率,适用于计数、埋点、状态同步等场景,兼具高性能与低延迟。
343 145
|
存储 负载均衡 监控
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
定时任务系统在应用平台中的重要性不言而喻,特别是互联网电商、金融等行业更是离不开定时任务。在任务数量不多、执行频率不高时,单台服务器完全能够满足。但是随着业务逐渐增加,定时任务系统必须具备高可用和水平扩展的能力,单台服务器已经不能满足需求。因此需要把定时任务系统部署到集群中,实现分布式定时任务系统集群。
6315 1
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
|
2月前
|
存储 自然语言处理 Java
为什么 Elasticsearch 搜索这么快?深入理解倒排索引与分词器原理
Elasticsearch 搜索快的秘诀在于倒排索引与分词器。倒排索引通过“词项→文档ID”映射,避免全表扫描;分词器则负责文本的切分与归一化处理,提升检索效率。本文图解剖析其核心原理,助你掌握ES高性能搜索的底层逻辑。(238字)
347 0
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
4059 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
12月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——事务相关
本文介绍Spring Boot事务配置管理,阐述事务在企业应用开发中的重要性。事务确保数据操作可靠,任一异常均可回滚至初始状态,如转账、购票等场景需全流程执行成功才算完成。同时,事务管理在Spring Boot的service层广泛应用,但根据实际需求也可能存在无需事务的情况,例如独立数据插入操作。
307 0
|
数据采集 移动开发 前端开发
springboot使用html模版导出pdf文档
springboot使用html模版导出pdf文档
|
前端开发 JavaScript Java
屎上最全vue-pdf+Springboot与aspose-words整合,开箱即用
本文详细介绍了如何通过Spring Boot与Aspose Words整合实现Word模板的填充及转换为PDF,并在前端使用Vue和javadog-vue-pdf实现PDF预览与下载。主要内容包括:实现Spring Boot与Aspose Words的整合,完成Word模板填充并转换为PDF;前端Vue集成javadog-vue-pdf进行PDF预览及下载。文章提供了详细的步骤说明,包括下载依赖、配置代理、代码示例等,并展示了最终成果。
1328 7
屎上最全vue-pdf+Springboot与aspose-words整合,开箱即用

热门文章

最新文章