java使用LibreOffice实现word转pdf

ops/2025/2/6 23:15:28/

之前使用dom4j转换,依赖office;
 网上还有Apache poi和itextpdf方式,尝试后发现复杂word,比如包含表格曲线等支持性不好。
 最后发现 LibreOffice:不依赖office,免费,可跨平台
参考链接:
https://developer.aliyun.com/article/1629006

https://blog.csdn.net/u013984781/article/details/144430991

1、下载LibreOffice

https://zh-cn.libreoffice.org/download/libreoffice/

2、代码

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;public class WordToPdfConverter {//LibreOffice的安装路径(如果环境变量已经配置,则不需要此路径)private static final String LIBREOFFICE_PATH = "/path/to/libreoffice"; //例如: "/usr/bin/libreoffice" 或 "C:\\Program Files\\LibreOffice\\program\\soffice.exe"public static void main(String[] args) {String inputFilePath = "path/to/your/input.docx";String outputFilePath = "path/to/your/output.pdf";convertWordToPdf(inputFilePath, outputFilePath);}public static void convertWordToPdf(String inputFilePath, String outputFilePath) {File inputFile = new File(inputFilePath);File outputFile = new File(outputFilePath);if (!inputFile.exists()) {System.err.println("Input file does not exist: " + inputFilePath);return;}// 构建LibreOffice命令行指令StringBuilder command = new StringBuilder();if (LIBREOFFICE_PATH != null && !LIBREOFFICE_PATH.isEmpty()) {command.append(LIBREOFFICE_PATH).append(" --headless ");} else {command.append("soffice --headless ");}command.append("--convert-to pdf ").append("--outdir ").append(outputFile.getParent()).append(" ").append(inputFilePath);try {// 执行系统命令Process process = Runtime.getRuntime().exec(command.toString());// 读取命令执行的输出和错误流(可选)BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));while ((line = errorReader.readLine()) != null) {System.err.println(line);}// 等待进程结束int exitCode = process.waitFor();if (exitCode == 0) {System.out.println("Conversion successful: " + outputFilePath);} else {System.err.println("Conversion failed with exit code: " + exitCode);}} catch (IOException | InterruptedException e) {e.printStackTrace();}}
}


http://www.ppmy.cn/ops/156279.html

相关文章

LabVIEW微位移平台位移控制系统

本文介绍了基于LabVIEW的微位移平台位移控制系统的研究。通过设计一个闭环控制系统,针对微位移平台的通信驱动问题进行了解决,并提出了一种LabVIEW的应用方案,用于监控和控制微位移平台的位移,从而提高系统的精度和稳定性。 项目背…

基于微信小程序的医院综合服务平台的设计与实现ssm+论文源码调试

4系统概要设计 4.1概述 本系统后台采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原…

LabVIEW的智能电源远程监控系统开发

在工业自动化与测试领域,电源设备的精准控制与远程管理是保障系统稳定运行的核心需求。传统电源管理依赖本地手动操作,存在响应滞后、参数调节效率低、无法实时监控等问题。通过集成工业物联网(IIoT)技术,实现电源设备…

为什么要用tauri开发跨平台桌面

1、跨平台:tauri目前能跑PC和移动端,支持windows,macos,linux,android,ios。 2、体积小:electron打包非常大,特别是在macos中打包,大得可怕。我在macos中打包了一个electron项目,占600MB,改成t…

说一下JVM管理的常见参数

Java虚拟机&#xff08;JVM&#xff09;有许多常见参数&#xff0c;用于控制其行为和性能。以下是一些常见的JVM参数及其说明&#xff1a; 1. 内存管理参数 -Xms<size> START 设置初始堆内存大小。例如&#xff0c;-Xms512m表示初始堆大小为512MB。 -Xmx<size>…

DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力

论文链接&#xff1a; [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长&#xff0c;自行扔到 Model 里&#xff0c;去翻译去提问吧。 工作原理&#xff1a; 主要技术&#xff0c;就是训练出一些专有用途小模型&…

Linux du 命令详解:查看磁盘使用情况与高级用法 (中英双语)查看某个用户磁盘占用

Linux du 命令详解&#xff1a;查看磁盘使用情况与高级用法 在 Linux 服务器或个人计算机中&#xff0c;了解磁盘使用情况是系统维护的关键任务之一。du&#xff08;Disk Usage&#xff09;命令是 Linux 提供的一个强大工具&#xff0c;可以帮助我们分析目录和文件的磁盘占用情…

RabbitMQ持久化队列配置修改问题

文章目录 1.问题产生2.问题解决1.询问gpt2.独立思考 1.问题产生 我在给一个普通队列去绑定死信交换机和死信队列的时候&#xff0c;发现总是报错x-dead-letter-exchange的属性为none ERROR [PFTID:] [Module:defaultModule] org.springframework.amqp.rabbit.connection.Cach…