0


实现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
  • 内网安装 官网下载,找最新版本在这里插入图片描述

使用版本拼接本地下载

https://download.documentfoundation.org/libreoffice/stable/7.5.6/rpm/x86_64/LibreOffice_7.5.6_Linux_x86-64_rpm.tar.gz
https://download.documentfoundation.org/libreoffice/stable/7.5.6/rpm/x86_64/LibreOffice_7.5.6_Linux_x86-64_rpm_langpack_zh-CN.tar.gz
https://download.documentfoundation.org/libreoffice/stable/7.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命令

支持

windows

Linux

转换

PDF

windows

需要安装微软

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
packagecom.gwssi.common.utils;importcom.documents4j.api.DocumentType;importcom.documents4j.api.IConverter;importcom.documents4j.job.LocalConverter;importcom.gwssi.common.core.constant.PathConstants;importcom.gwssi.util.PathUtils;importlombok.extern.slf4j.Slf4j;importjava.io.*;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.UUID;@Slf4jpublicclassDocxUtil{/**
     * 通过documents4j 实现word转pdf
     *
     * @param sourcePath 源文件地址 如 /root/example.doc
     */publicstaticFiledocuments4jWordToPdf(String sourcePath){returndocuments4jWordToPdf(newFile(sourcePath));}publicstaticFiledocuments4jWordToPdf(File file){String os =System.getProperty("os.name").toLowerCase();

        log.info("当前系统:{}", os);if(os.contains("win")){// Windows操作系统returnwinDocuments4jWordToPdf(file);}elseif(os.contains("nix")|| os.contains("nux")|| os.contains("mac")){// Unix/Linux/Mac操作系统returnlinuxDocuments4jWordToPdf(file);}else{// 未知操作系统thrownewRuntimeException("不支持当前操作系统转换文档");}}/**
     * 通过documents4j 实现word转pdf -- Windows 环境 需要有 Microsoft Office 服务
     *
     * @param file 源文件
     */publicstaticFilewinDocuments4jWordToPdf(File file){File outputFile =newFile(PathUtils.getTempPath());try{InputStream docxInputStream =newFileInputStream(file);OutputStream outputStream =newFileOutputStream(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();returnnull;}}/**
     * 通过documents4j 实现word转pdf -- linux 环境 需要有 libreoffice 服务
     *
     * @param file 源文件
     */publicstaticFilelinuxDocuments4jWordToPdf(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);returnnewFile(pdfFilePath);}else{returnnull;}}catch(Exception e){// 转换失败
            log.error("Word文档转换为PDF失败,原因:执行命令时出现异常。", e);returnnull;}}}
  • ExecUtil
@Slf4jpublicclassExecUtil{publicstaticbooleanexecuteLinuxCmd(String cmd)throwsIOException{// 执行命令行工具命令Process process =Runtime.getRuntime().exec(cmd);try{
            process.waitFor();}catch(InterruptedException e){
            log.error("执行 Linux 命令异常:",e);returnfalse;}returntrue;}}
标签: linux word pdf

本文转载自: https://blog.csdn.net/F15217283411/article/details/133947490
版权归原作者 嗝屁小孩纸 所有, 如有侵权,请联系我们删除。

“实现Linux下Word转PDF、Java调用命令方式”的评论:

还没有评论