实现Linux下Word转PDF、Java调用命令方式

编程入门 行业动态 更新时间:2024-10-15 04:27:51

实现Linux下Word转PDF、Java调用<a href=https://www.elefans.com/category/jswz/34/1771323.html style=命令方式"/>

实现Linux下Word转PDF、Java调用命令方式

使用 LibreOffice 实现 Word 转 PDF 和 Java 调用命令

1、 安装 LibreOffice

  • 外网安装
# 一键安装
yum install -y libreoffice
# 验证版本
libreoffice --version
# Warning: -version is deprecated.  Use --version instead.
# LibreOffice 7.5.6.2 f654817fb68d6d4600d7d2f6b647e47729f55f15
  • 内网安装
    官网下载,找最新版本

使用版本拼接本地下载

.5.6/rpm/x86_64/LibreOffice_7.5.6_Linux_x86-64_rpm.tar.gz
.5.6/rpm/x86_64/LibreOffice_7.5.6_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
.5.6/rpm/x86_64/LibreOffice_7.5.6_Linux_x86-64_rpm_helppack_zh-CN.tar.gz

下载完成放到内网服务器上

# 安装软件包
tar -zxvf LibreOffice_7.5.6_Linux_x86-64_rpm.tar.gz
cd LibreOffice_7.5.6.2_Linux_x86-64_rpm/RPMS/
rpm -ivh *.rpm# 安装中文语言包
tar -zxvf LibreOffice_7.5.6_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
cd LibreOffice_7.5.6.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/
rpm -ivh *.rpm# 安装离线帮助文档
tar -zxvf LibreOffice_7.5.6_Linux_x86-64_rpm_helppack_zh-CN.tar.gz
cd LibreOffice_7.5.6.2_Linux_x86-64_rpm_helppack_zh-CN/RPMS/
rpm -ivh *.rpm

2、启动服务

# 开启接口服务,用于word转pdf
nohup libreoffice7.5 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &
libreoffice7.05--headless --invisible --convert-to pdf ./input.docx --outdir ./

3、安装字体库

# 字体
cd /usr/share/fonts
# 拷贝至该目录下 C:\Windows\Fonts :simhei.ttf、Microsoft YaHei UI
yum install -y fontconfig mkfontscale
mkfontdir
fc-cache -fv
# 命令执行成功后终端最后一行会显示 fc-cache: succeeded
#验证
fc-list :lang=zh

4、Java调用Linux命令

支持 windowsLinux 转换 PDFwindows需要安装微软Microsoft Office,Linux环境安装LibreOffice开源Office

  • 依赖
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.1.10</version>
</dependency>
<dependency><groupId>com.documents4j</groupId><artifactId>documents4j-transformer-msoffice-word</artifactId><version>1.1.10</version>
</dependency>
  • DocxUtil
package com.gwssimon.utils;import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import com.gwssimon.core.constant.PathConstants;
import com.gwssi.util.PathUtils;
import lombok.extern.slf4j.Slf4j;import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;@Slf4j
public class DocxUtil {/*** 通过documents4j 实现word转pdf** @param sourcePath 源文件地址 如 /root/example.doc*/public static File documents4jWordToPdf(String sourcePath) {return documents4jWordToPdf(new File(sourcePath));}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) {File outputFile = new File(PathUtils.getTempPath());try {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 = "libreoffice7.5 --headless --convert-to pdf "+ absolutePath + " --outdir " + parentPath;// 执行转换命令try {boolean result = ExecUtil.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;}}}
  • ExecUtil
@Slf4j
public class ExecUtil {public 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;}}

更多推荐

实现Linux下Word转PDF、Java调用命令方式

本文发布于:2023-12-06 21:34:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1669004.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令   方式   Word   Linux   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!