SpringBoot项目实现Word转PDF的完整解决方案

 更新时间:2026年01月15日 08:34:10   作者:奋斗的狍子007  
本文介绍了LibreOffice这款免费、开源、跨平台的办公套件,包括其功能、应用场景、核心组件、安装方法及如何在项目中调用,需要的朋友可以参考下

一、简介

LibreOffice 是一款免费、开源、跨平台的办公套件(Office Suite),由 LibreOffice 基金会维护,对标微软 Office(Word/Excel/PowerPoint 等),支持 Windows、macOS、Linux 等主流操作系统,核心目标是提供无版权限制、功能完整的办公解决方案。完美支持微软 Office 格式(.docx/.xlsx/.pptx),也支持开源格式(.odt/.ods/.odp)和通用格式(PDF)。

二、应用场景

1.普通办公:替代微软 Office 完成日常文档 / 表格 / 幻灯片编辑,无版权风险;

2.自动化文件转换:就是你代码中的场景,批量将 docx/xlsx/pptx 转换为 PDF(最常用),或反向转换;

3.服务器端文档处理:Web 系统中,用户上传 Word 文档,后台自动转换为 PDF 供下载;

4.批量生成文档:结合模板,通过宏 / 命令行批量生成合同、报表等标准化文档;

5.跨平台 办公:Linux 服务器 / 桌面端无微软 Office 时,用 LibreOffice 完成办公需求。

三、LibreOffice 核心组件

四、安装LibreOffice

1.准备几个安装包

2.安装如下命令安装即可

tar -xvf LibreOffice_25.2.4.3_Linux_x86-64_rpm.tar.gz

cd LibreOffice_25.2.4.3_Linux_x86-64_rpm/RPMS/

sudo rpm -ivh *.rpm

依次安装其他安装包

3.如果出现问题,可以升级一下当前环境的libxslt

libxslt在 C/C++ 程序中调用 XSLT 转换功能的底层库,性能高效、跨平台,是处理 XML 转换的工业级标准库。

yum install libxslt

五、项目中如何调用

代码示例
1.创建2个目录

inputFilePath 源文件目录
File fileFolder = new File(fileFolderPath);

outDir 转化之后的文件目录
File fileFolder = new File(fileFolderPath);

2.核心命令格式

# 基础格式:soffice --headless [操作参数] [输入文件] [输出参数]

String  cmdStr =  path(soffice所在的安装目录) + soffice --headless --convert-to pdf inputFilePath --outdir outDir

–headless:开启无头模式(必加,否则会弹出图形界面);
–convert-to [格式]:指定转换目标格式(如 pdf/xlsx/docx);
–outdir [路径]:指定输出目录;
–invisible:可选,增强无头模式(避免意外弹出窗口);
-env:UserInstallation=file:///tmp/lo_temp:可选,解决多线程 / 多进程调用时的冲突。

3.创建进程执行指定的可执行程序

Process process = Runtime.getRuntime().exec(command);

// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
boolean exited = process.waitFor(5, TimeUnit.MINUTES);

if (exited) {
	exitStatus = process.exitValue();

	// 下面两个可以获取输入输出流
	printMessage(process.getErrorStream(), true);
	printMessage(process.getInputStream(), false);
 }

操作系统给每个进程的输出缓冲区(stdout/stderr)是有大小限制的(比如几 KB)。
如果 LibreOffice 执行时输出了内容,但你的 Java 程序没有读取这些内容,缓冲区会被占满,LibreOffice 进程会被阻塞,无法继续执行

private void printMessage(final InputStream input, boolean error) {
	try {
		InputStreamReader isr = new InputStreamReader(input, "utf-8");
		BufferedReader br = new BufferedReader(isr);
		String info;
		while ((info = br.readLine()) != null) {
			if (error) {
				//这里不用做任何操作
				log.error(info);
			} else {
				//这里不用做任何操作
				log.info(info);
			}
		}
	} catch (Exception e) {
		log.error("ETechHelp.printMessage is fail", e);
	}
}


读取的是进程的错误输出 process.getErrorStream()

读取的是进程的正常输出 process.getInputStream()

这套方案可直接集成到你的 Spring Boot 项目中,只需根据实际环境调整 application.yml 中的 LibreOffice 路径即可。

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

相关文章

  • 一文详解JDK21中虚拟线程

    一文详解JDK21中虚拟线程

    虚拟线程是JDK19中引入的,JDK21正式发布,本文主要介绍了JDK21中虚拟线程,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 将Springboot项目升级成Springcloud项目的图文教程

    将Springboot项目升级成Springcloud项目的图文教程

    本文主要介绍了将Springboot项目升级成Springcloud项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 手把手教你使用Java实现在线生成pdf文档

    手把手教你使用Java实现在线生成pdf文档

    在实际的业务开发的时候,常常会需要把相关的数据信息,通过一些技术手段生成对应的PDF文件,然后返回给用户。本文将手把手教大家如何利用Java实现在线生成pdf文档,需要的可以参考一下
    2022-03-03
  • 客户端设置超时时间真的很重要

    客户端设置超时时间真的很重要

    今天小编就为大家分享一篇关于客户端设置超时时间真的很重要,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • SpringBoot配置GlobalExceptionHandler全局异常处理器案例

    SpringBoot配置GlobalExceptionHandler全局异常处理器案例

    这篇文章主要介绍了SpringBoot配置GlobalExceptionHandler全局异常处理器案例,通过简要的文章说明如何去进行配置以及使用,需要的朋友可以参考下
    2021-06-06
  • Java对xls文件进行读写操作示例代码

    Java对xls文件进行读写操作示例代码

    Java开发项目中经常会碰到处理Excel文件中数据的情况,下面这篇文章主要给大家介绍了利用Java对xls文件进行读写操作的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • 一文带你搞懂Java中Object类和抽象类

    一文带你搞懂Java中Object类和抽象类

    这篇文章主要为大家详细介绍了Java中Object类和抽象类的定义与使用,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08
  • Spring事务管理方法步骤解析

    Spring事务管理方法步骤解析

    这篇文章主要介绍了Spring事务管理方法步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 详解springMVC容器加载源码分析

    详解springMVC容器加载源码分析

    这篇文章主要介绍了详解springMVC容器加载源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java深入了解数据结构之二叉搜索树增 插 删 创详解

    Java深入了解数据结构之二叉搜索树增 插 删 创详解

    二叉搜索树是以一棵二叉树来组织的。每个节点是一个对象,包含的属性有left,right,p和key,其中,left指向该节点的左孩子,right指向该节点的右孩子,p指向该节点的父节点,key是它的值
    2022-01-01

最新评论