SpringBoot实现Word转PDF​的完整思路与示例代码详解

 更新时间:2026年05月07日 15:51:47   作者:每日技术  
本文介绍了在SpringBoot中实现将Word转换为PDF的多种方案,包括docx4j、LibreOffice、ApachePOI+iText等主流方案,针对不同需求提供了详细的方案对比,代码示例以及注意事项,希望对大家有所帮助

下面给你一个在 Spring Boot 中实现 Word 转 PDF​ 的完整思路与示例,覆盖主流可行方案推荐做法以及注意事项,你可以按项目需求选择。

一、总体方案对比

方案是否收费转换质量依赖环境推荐指数
docx4j + Plutext PDF Converter商业需授权⭐⭐⭐⭐⭐无(Java)✅✅✅
LibreOffice(命令行)免费⭐⭐⭐⭐需安装LibreOffice✅✅✅
Apache POI + iText(间接)免费⭐⭐复杂
Aspose.Words for Java商业⭐⭐⭐⭐⭐✅(有钱)

生产环境最推荐

  • Windows/Linux 服务器:LibreOffice
  • 企业级高质量:docx4j + Plutext(或 Aspose)

二、方案一:LibreOffice(最常用、免费)

原理

Spring Boot 调用服务器上的 soffice命令将 .docx.pdf

安装 LibreOffice

# Ubuntu
sudo apt install libreoffice
# CentOS
yum install libreoffice
# Windows
下载安装 LibreOffice

Spring Boot 示例代码

Maven 依赖(无需额外)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

Service 示例

import java.io.*;

@Service
public class WordToPdfService {

    public void convert(String wordPath, String pdfPath) throws Exception {
        String command = "libreoffice --headless --convert-to pdf "
                + wordPath + " --outdir " + new File(pdfPath).getParent();

        Process process = Runtime.getRuntime().exec(command);
        int exitCode = process.waitFor();

        if (exitCode != 0) {
            throw new RuntimeException("Word转PDF失败");
        }
    }
}

优点

  • 免费
  • 支持 .doc / .docx
  • 格式还原度高

注意

  • Linux 必须安装字体(否则中文乱码)
  • 不支持并发过高(建议队列或限制线程)

三、方案二:docx4j + Plutext(企业级)

Maven 依赖

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>11.4.9</version>
</dependency>
<dependency>
    <groupId>org.plutext</groupId>
    <artifactId>plutext-pdf-converter</artifactId>
    <version>3.3.0</version>
</dependency>

转换代码

import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

import java.io.FileOutputStream;

public void convert() throws Exception {
    WordprocessingMLPackage wordMLPackage =
            WordprocessingMLPackage.load(new File("input.docx"));

    Docx4J.toPDF(wordMLPackage, new FileOutputStream("output.pdf"));
}

优点

  • 纯 Java
  • 不依赖外部软件
  • 样式还原好

缺点

  • Plutext 商用需授权
  • 对复杂表格/页眉页脚偶有偏差

四、方案三:Aspose.Words(最强但贵)

Maven

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>23.12</version>
</dependency>

代码示例

import com.aspose.words.Document;

Document doc = new Document("input.docx");
doc.save("output.pdf");

五、常见问题 & 解决方案

中文乱码

Linux 安装中文字体

yum install wqy-microhei-fonts

并发问题

  • LibreOffice 不建议多线程同时转换
  • 可使用线程池 + 队列

Web 接口示例

@PostMapping("/convert")
public ResponseEntity<?> convert(MultipartFile file) throws Exception {
    // 保存word
    // 调用转换
    // 返回pdf流
}

六、推荐选型总结

场景推荐方案
普通后台系统LibreOffice
企业文档系统docx4j + Plutext
金融/合同/报表Aspose.Words

到此这篇关于SpringBoot实现Word转PDF​的完整思路与示例代码详解的文章就介绍到这了,更多相关SpringBoot Word转PDF​内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring组件初始化扩展点BeanPostProcessor的作用详解

    Spring组件初始化扩展点BeanPostProcessor的作用详解

    本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感兴趣的朋友一起看看吧
    2025-03-03
  • Java异常监控(监控利器)

    Java异常监控(监控利器)

    这篇文章给大家介绍Java异常监控(监控利器)的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2026-03-03
  • SpringBoot任意版本集成Swagger各种版本的操作指南

    SpringBoot任意版本集成Swagger各种版本的操作指南

    在学习Swagger生成API文档的时候经常会遇到问题,而目前市面上大部分技术分享者的SpringBoot版本并没和我们的同步,导致一些一模一样的代码,在我们的项目上却无法使用,这是一个经常性的问题,本文章就旨在和大家搞定SpringBoot任意版本集成Swagger各种版本
    2024-07-07
  • 9个java数组常用操作实例

    9个java数组常用操作实例

    在本篇文章里小编给各位整理了关于java数组常用操作的实例以及相关的代码,需要的朋友们跟着学习下。
    2019-07-07
  • Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码

    Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码

    这篇文章主要介绍了Java 重命名 Excel 工作表并设置工作表标签颜色的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 使用JAVA8 filter对List多条件筛选的实现

    使用JAVA8 filter对List多条件筛选的实现

    这篇文章主要介绍了使用JAVA8 filter对List多条件筛选的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • JAVA实现sm3加密签名以及防止重复攻击

    JAVA实现sm3加密签名以及防止重复攻击

    这篇文章主要给大家介绍了关于JAVA实现sm3加密签名以及防止重复攻击的相关资料,SM3是签名算法,和MD5一样(对于应用层来说),SM4是对称加密算法,和AES一样(对于应用层来说),需要的朋友可以参考下
    2023-10-10
  • Java单例模式中的线程安全问题

    Java单例模式中的线程安全问题

    本文主要介绍了Java单例模式中的线程安全问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Java中的@Accessors使用详解

    Java中的@Accessors使用详解

    这篇文章主要介绍了Java中的@Accessors使用详解,@RequiredArgsConstructor是Lombok的一个注解,简化了我们对setter和getter方法操作,它可以作用在类上,也可以作用在类的单个属性上,需要的朋友可以参考下
    2024-01-01
  • idea不使用maven如何将项目打包

    idea不使用maven如何将项目打包

    使用IDEA 2021版本,不借助Maven进行打WAR包的步骤是:首先点击Project Structure,然后点击Artifacts,接着选择需要的打包类型,设置好包的名称,最后进行打包,这种方法适用于不使用Maven进行项目管理的情况
    2024-09-09

最新评论