欢迎光临
我们一直在努力

linux离线安装LibreOffice,并实现word转pdf功能(超详细)

libreoffice离线包下载地址:https://zh-cn.libreoffice.org/download/libreoffice/ 如果服务器有网,可参考该篇博客:https://www.cnblogs.com/qq545505061/p/18345179

1、安装

上传LibreOffice_25.8.2_Linux_x86-64_rpm.tar.gz到服务器目录,自己记住就好

解压主安装包

sudo tar xzf LibreOffice_25.8.2_Linux_x8664_rpm.tar.gz

查看解压后的目录结构,解压后会得到一个类似 LibreOffice_25.8.2.2_Linux_x86-64_rpm的目录。

ls la

进入解压后的目录

cd LibreOffice_25.8.2.2_Linux_x8664_rpm

您会看到类似这样的结构: RPMS/ # 包含所有RPM包 readmes/ # 说明文档

安装 RPM 包,进入RPMS目录

cd RPMS

查看所有RPM包

ls -la *.rpm

安装所有RPM包

sudo rpm Uvh *.rpm

或者逐个安装主要包(如果全部安装有问题):

sudo rpm Uvh xxx.rpm

链接到 /usr/bin(系统程序目录,使用libreoffice命令)

一般安装成功过后,都在/opt/libreoffice25.8目录下

sudo ln sf /opt/libreoffice25.8/program/soffice /usr/bin/libreoffice

成功后一般在opt目录,查看版本号

libreoffice version

== 如果缺少字体,安装Windows字体到Linux,复制字体文件‌,如果你有Windows系统的字体文件(例如.ttf或.otf文件),你可以将它们复制到Linux系统中的字体目录常用的Linux字体目录是/usr/share/fonts/或~/.fonts/。==

更新字体缓存

sudo fccache fv

测试命令,三个都可以

libreoffice headless convertto pdf:"writer_pdf_Export:UseLosslessCompression=false" outdir /usr/local/web/oss /usr/local/web/oss/1763015082382naReport.docx

libreoffice invisible convertto pdf outdir /usr/local/web/oss /usr/local/web/oss/1763015082382naReport.docx

libreoffice headless convertto pdf outdir /usr/local/web/oss /usr/local/web/oss/1763015082382naReport.docx

2、java代码工具类

依赖

<!word 2 pdf start>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4jlocal</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4jtransformermsofficeword</artifactId>
<version>1.0.3</version>
</dependency>

package org.springblade.modules.api.utils;

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.util.logging.Logger;

@Slf4j
public class PdfUtil {

/**
* windows系统word转pdf
* @param pdfFile 转换后的pdf文件
* @param wordFile word源文件
*/

public static void winWordToPdf(File pdfFile, File wordFile) {
try {
IConverter converter = LocalConverter.builder().build();
converter.convert(new FileInputStream(wordFile))
.as(DocumentType.DOCX)
.to(new FileOutputStream(pdfFile))
.as(DocumentType.PDF).execute();
} catch (FileNotFoundException e) {
log.info("word转换pdf失败", e);
}
}

/**
* linux系统word转pdf   * 使用LibreOffice转换。系统需安装LibreOffice   * 转换命令 libreoffice –invisible –convert-to pdf –outdir output_dir source_path   * 转换后的pdf文件名使用的是源文件的名称,所以如果要指定输出文件名称,就需把源文件名称改成想要输出的名称
* @param pdfFile 转换后的pdf文件
* @param wordFile word源文件
*/

public static void linuxWordToPdf(File pdfFile, File wordFile) {
// 获取word文件的绝对路径
String sourcePath = wordFile.getAbsolutePath(); // 获取pdf文件存放文件夹的绝对路径
String outDir = pdfFile.getAbsolutePath().substring(0, pdfFile.getAbsolutePath().lastIndexOf(File.separator));

// 构建LibreOffice的命令行工具命令
String command = "libreoffice –invisible –convert-to pdf –outdir " + outDir + " " + sourcePath;
log.info(command);
// 执行转换命令
try {
executeLinuxCmd(command);
} catch (Exception e) {
log.error("linuxWordToPdf linux环境word转换为pdf时出现异常:", e);
}
}

/**
* 执行命令行
*
* @param cmd 命令行
* @return
*/

private static boolean executeLinuxCmd(String cmd) {
try {
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
} catch (InterruptedException e) {
log.error("executeLinuxCmd 执行Linux命令异常:", e);
Thread.currentThread().interrupt();
return false;
} catch (IOException e) {
log.error("获取系统命令执行环境异常", e);
}
return true;
}

public static void main(String[] args) {
// 待转换的word文件
// File wordFile = new File("/home/document/word/11.word");
File wordFile = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\fsdownload\\\\mex静态济源\\\\1762998440927naReport.docx");
// 转换后的pdf文件
// File pdfFile = new File("/home/document/pdf/11.pdf");
File pdfFile = new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\fsdownload\\\\mex静态济源\\\\1762998440927naReport.pdf");
// 获取当前系统名称
String osName = System.getProperty("os.name").toLowerCase();
// 根据系统选择执行方法
if (osName.contains("win")) {
PdfUtil.winWordToPdf(pdfFile, wordFile);
} else if (osName.contains("nux") || osName.contains("nix")) {
PdfUtil.linuxWordToPdf(pdfFile, wordFile);
}
}
}

赞(0)
未经允许不得转载:171主机测评 » linux离线安装LibreOffice,并实现word转pdf功能(超详细)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址