documents4j 将word转pdf文件,本地(Windows)测试没问题,部署到服务器(centos)报错

问题

报错如下:
在这里插入图片描述

代码

首先要保证你的Java代码没问题,可以参考下面代码

maven依赖

<!--documents4j-->
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version>
</dependency>
<!-- documents4j-->
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.0.3</version>
</dependency>

DocxToPdfUtil工具类

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import lombok.extern.slf4j.Slf4j;@Slf4j
public class DocxToPdfUtil {/*** 通过documents4j 实现word转pdf** @param sourcePath 源文件地址 如 /root/example.doc*/public static File documents4jWordToPdf(String sourcePath) {return documents4jWordToPdf(new File(sourcePath));}/*** 通过documents4j 实现word转pdf** @param file 源文件*/public static File documents4jWordToPdf(File file) {String os = System.getProperty("os.name").toLowerCase();log.info("当前系统:{}", os);if (os.contains("win")) {// Windows操作系统return winDocuments4jWordToPdf(file);} else if (os.contains("nix") || os.contains("nux") || os.contains("mac")) {// Unix/Linux/Mac操作系统return linuxDocuments4jWordToPdf(file);} else {// 未知操作系统throw new RuntimeException("不支持当前操作系统转换文档");}}/*** 通过documents4j 实现word转pdf -- Windows 环境 需要有 Microsoft Office 服务** @param file 源文件*/public static File winDocuments4jWordToPdf(File file) {String parentPath = file.getParent();File outputFile = new File(parentPath + File.separator + file.getName().replaceAll("\\.(docx?|\\w+)$", "") + ".pdf");try {// 这种方式在Linux服务器不可用,所以除非你是window服务器InputStream docxInputStream = new FileInputStream(file);OutputStream outputStream = new FileOutputStream(outputFile);IConverter converter = LocalConverter.builder().build();converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();docxInputStream.close();outputStream.close();return outputFile;} catch (Exception e) {e.printStackTrace();return null;}}/*** 通过documents4j 实现word转pdf -- linux 环境 需要有 libreoffice 服务** @param file 源文件*/public static File linuxDocuments4jWordToPdf(File file) {// 获取文件的绝对路径和目录路径String absolutePath = file.getAbsolutePath();String parentPath = file.getParent();// 构建LibreOffice的命令行工具命令String commands = "libreoffice --convert-to pdf "+ absolutePath + " --outdir " + parentPath;// 执行转换命令try {boolean result = executeLinuxCmd(commands);if (result) {// 转换成功,返回转换后的PDF文件String pdfFilePath = parentPath + File.separator + file.getName().replaceAll("\\.(docx?|\\w+)$", "") + ".pdf";log.info(pdfFilePath);log.info(pdfFilePath);return new File(pdfFilePath);} else {return null;}} catch (Exception e) {// 转换失败log.error("Word文档转换为PDF失败,原因:执行命令时出现异常。", e);return null;}}/*** 执行命令行** @param cmd 命令行* @return* @throws IOException*/private static boolean executeLinuxCmd(String cmd) throws IOException {// 执行命令行工具命令Process process = Runtime.getRuntime().exec(cmd);try {process.waitFor();} catch (InterruptedException e) {log.error("执行 Linux 命令异常:", e);return false;}return true;}
}

测试

@SpringBootApplication
public class PdfdemoApplication {public static void main(String[] args) {//Linux服务器String inputFile = "/usr/local/a.docx";//本地
//        String inputFile = "C:\\zhushanglin\\test\\a.docx";DocxToPdfUtil.documents4jWordToPdf(inputFile);System.out.println("Done! Pdf ");SpringApplication.run(PdfdemoApplication.class, args);}
}

发现本地win没问题,到服务器Linux就有问题,原因是 documents4j 利用 Microsft Office 的 APIs 来进行文档转换,因此需要在Linux上安装 OpenOffice/LibreOffice 编辑器

Ubuntu:

sudo apt-get install libreoffice

CentOS:

sudo yum install libreoffice

把这装上后,再测试,发现可以完美转换。
在这里插入图片描述

下课!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488407.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java之继承

继承&#xff08;Inheritance&#xff09;&#xff1a;一个类可以继承另一个类的属性和方法&#xff08;不支持多继承&#xff09;&#xff0c;这个被继承的类称为父类&#xff08;或超类、基类&#xff09;&#xff0c;继承它的类称为子类&#xff08;或派生类&#xff09;。 …

唯众物联网(IOT)全功能综合实训教学解决方案

一、引言 在信息技术日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;作为推动数字化转型的关键力量&#xff0c;其触角已延伸至我们生活的方方面面&#xff0c;深刻地重塑了工作模式、生活习惯乃至社会结构的每一个角落。面对这一前所未有的变革浪潮&#xff0c…

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞&#xff0c;编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码&#xff0c;从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

InternLM学习笔记

入门岛 1. Linux基础知识 2. Python 基础知识 from collections import Countertext """ Got this panda plush toy for my daughters birthday, who loves it and takes it everywhere. Its soft and super cute, and its face has a friendly look. Its a …

【redis】一致性hash算法和hash槽

普通hash取模 直接hash(key)%N , N为机器的数量&#xff0c;但不利于集器扩容或者缩容 一致性hash算法和hash槽 一致性hash算法是在redis 分片中使用&#xff0c;hash槽在redis cluster&#xff08;集群&#xff09;中使用 Redis一致性hash&#xff1a;Redis一致性hash是为…

Idea如何查看Maven依赖树

1、使用idea自带的功能查看依赖树 2、使用Maven Helper插件 https://zhuanlan.zhihu.com/p/699663369

指针数组模拟二维数组

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 指针数组&#xff0c;是数组&#xff0c;但是它的元素都是指针。 #define _CRT_SECURE_NO_WARNING #include <stdio.h> int main(void) {int a 3;int b 4;int c 5;int* arr[3] { &a,&b,…

Springboot集成Elasticsearch High Level REST Client实现增删改查实战

获取源码&#x1f6a9; 需要完整代码资料&#xff0c;请一键三连后评论区留下邮箱&#xff0c;安排发送&#xff01;&#xff01;&#xff01;&#x1f916; 什么是High Level REST Client&#xff1f; Elasticsearch 的 High Level REST Client 是一个用于与 Elasticsearch…

2024安全大模型技术与市场研究报告

大模型驱动的AIGC引发技术革命&#xff0c;国资委强调国企需加大AI投入。大模型解决网络安全行业攻防不对等问题&#xff0c;国内外企业纷纷推出基于大模型的网络安全产品&#xff0c;AI将改变网络安全产品格局。 自 2022 年底开始&#xff0c;以 LLM(大语言模型&#xff0c;简…

python-实践简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数&#xff1a; import pygame import time import random 游戏源码&#xff1a; import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

{Spring Boot 原理篇} Spring Boot自动装配原理

SpringBootApplication 1&#xff0c;Spring Boot 应用启动&#xff0c;SpringBootApplication标注的类就是启动类&#xff0c;它去实现配置类中的Bean的自动装配 SpringBootApplication public class SpringbootRedis01Application {public static void main(String[] args)…

计算word文件打印页数 VBA实现

目录 场景复现环境说明实现原理计算当前文件夹下所有word文件页数总和利用递归计算当前文件夹所有work文件页面数量几个BUG计算结果软件报价后话 场景复现 最近需要帮我弟打印高考资料&#xff0c;搜集完资料去网上打印&#xff0c;商家发出了这个计算页数的界面。我就好奇怎么…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

【Tomcat】Mac M3 Pro安装Tomcat7

文章目录 下载配置环境变量修改权限启动和关闭 下载 官网&#xff1a;https://tomcat.apache.org/ cd ~/Library tar -zxvf /Users/用户名/Downloads/apache-tomcat-7.0.99.tar.gz mv apache-tomcat-7.0.99 ~/Library/tomcat配置环境变量 vi ~/.bash_profileexport TOMCAT…

Oracle核心进程详解并kill验证

Oracle核心进程详解并kill验证 文章目录 Oracle核心进程详解并kill验证一、说明二、核心进程详解2.1.PMON-进程监控进程2.2.SMON-系统监控进程2.3.DBWn-数据库块写入进程2.4. LGWR-日志写入器进程2.5. CKPT-检查点进程 三、Kill验证3.1.kill ckpt进程3.2.kill pmon进程3.3.kill…

【OpenCV C++20 学习笔记】操作图片

操作图片 概述图片的导入和保存对导入的图片的操作获取像素值Point类型和图片像素 内存管理和引用计数一些简便操作图片可视化更精确的类型转换 概述 在本专栏的第一篇文章中就介绍了一个用OpenCV处理图片的实例&#xff08;《图片处理基础》&#xff09;&#xff0c;这篇文章…

破局产品同质化:解锁3D交互式营销新纪元!

近年来&#xff0c;随着数字体验经济的蓬勃发展&#xff0c;3D交互式营销作为一种创新手段迅速崛起&#xff0c;它巧妙地解决了传统产品展示中普遍存在的缺乏差异性和互动性的问题&#xff0c;使您的产品在激烈的市场竞争中独树一帜&#xff0c;脱颖而出。 若您正面临产品营销…

杭州东网约车管理再出行方面取得的显著成效

随着科技的飞速发展&#xff0c;网约车已成为人们日常出行的重要选择。在杭州这座美丽的城市&#xff0c;网约车服务更是如雨后春笋般蓬勃发展。特别是杭州东站&#xff0c;作为杭州的重要交通枢纽&#xff0c;网约车管理显得尤为重要。近日&#xff0c;沧穹科技郑重宣告已助力…

photoshop学习笔记——选区2 套索工具

套索工具 快捷键 L shift L 在3中套索工具间切换 套索工具有3种 套索工具 按下鼠标左键绘制选取&#xff0c;松开后自动闭合&#xff0c;完成选取绘制 多边形套索工具 按下鼠标左键绘制定位点&#xff0c;点与点之间用直线连接&#xff0c;使用back键删除上一个点&#x…

外行对自动驾驶汽车的一些想法-2024-

起源 前段时间有关于自动驾驶汽车的讨论&#xff0c;现在热度终于快过去了。 (⊙﹏⊙) 其实&#xff0c;完全不用担心自动驾驶取代人类。 引用 这是一篇24年4月的报道。 上图为引用&#xff0c;可以看到打工人的忙碌。 2023 一个热爱自动驾驶但妥妥外行之人的思考-2023-C…