文件格式转换神器 unoconv !!!

一、Unoconv简介

  • unoconv是一个基于LibreOffice / Openoffice开发的命令行工具。
  • 可以将不同格式的文件(如DOC、PPT、PDF等)在不同的操作系统上通过Libreoffice / Openoffice转换为PDF、DOC、PNG、PPTX等格式。
  • 支持在命令行中指定输出文件名称、格式等功能。

官方文档:http://dag.wiee.rs/home-made/unoconv/
Github地址:https://github.com/unoconv/unoconv

二、环境安装

unoconv 依赖 LibreOfficePython 环境,LibreOffice安装包中包含了一个Python解释器。
在这里插入图片描述

2.1 Linux安装LibreOffice

  1. 卸载已有的:
    yum remove libreoffice*
    
  2. 下载:https://www.libreoffice.org/download/download/
    这里选择的是:libreoffice7.6.6.3
    其他版本:https://downloadarchive.documentfoundation.org/libreoffice/old/
    在这里插入图片描述
  3. 解压:
    tar -zxvf LibreOffice_7.6.6_Linux_x86-64_rpm.tar.gz
    
  4. 安装:
    cd LibreOffice_7.6.6.3_Linux_x86-64_rpm/RPMS && yum localinstall *.rpm
    
  5. 验证:
    ll /usr/bin | grep libre
    
    libreoffice7.6 --version
    

2.2 Windows安装LibreOffice

  1. 下载地址:https://downloadarchive.documentfoundation.org/libreoffice/old/7.6.6.3/win/x86_64/
    在这里插入图片描述

  2. 安装:
    没什么要注意的,一直下一步就可以了,默认安装到C盘。

  3. 配置系统环境变量:C:\Program Files\LibreOffice\program
    在这里插入图片描述

  4. 验证:soffice --version
    在这里插入图片描述

三、安装unoconv

3.1 Linux安装unoconv

  1. 下载:https://github.com/unoconv/unoconv/archive/refs/tags/0.8.2.tar.gz
  2. 解压
    tar -zxvf /data0/unoconv-0.8.2.tar.gz
    
  3. 创建软连接(使用绝对路径)
    ln -s /data0/unoconv-0.8.2/unoconv /usr/bin/unoconv
    
  4. 验证
    ll /usr/bin | grep unoconv
    
    unoconv --version
    
  5. 安装中文字体库(解决中文乱码问题)
    可参考这篇文章:https://blog.csdn.net/Ls66666Ls/article/details/119875353

3.2 Windows安装unoconv

  1. 下载:https://github.com/unoconv/unoconv/archive/refs/tags/0.8.2.zip

  2. 解压

  3. C:\Windows下创建可执行文件unoconv.bat
    在这里插入图片描述
    文件内容如下:

    @echo off
    python D:\Develop\Environment\unoconv-0.8.2\unoconv %*
    

    这里解释一下:

    • @echo off 是为了防止显示命令。
    • python D:\Develop\Environment\unoconv-0.8.2\unoconv %* 用于执行unoconv命令。
    • %* 是一个占位符,用来传递你在命令行中输入的所有参数。
  4. 验证:

    1)查询版本信息:unoconv --version
    在这里插入图片描述
    2)文件转换:unoconv -f [目标格式] [目标文件名] [原文件名]
    请添加图片描述

四、Java使用unoconv完成文件格式转换

/**
 * 利用unoconv进行文件格式转换
 *
 * @param sourceFilePath 源文件全路径
 * @param format         转换类型(例: pdf、docx、pptx等)
 * @author sunhaonan 2023/12/11 14:40
 */
private static void convert(String sourceFilePath, String format)
        throws IOException, InterruptedException {

    if (!FileUtil.exist(sourceFilePath)) {
        throw new ServiceException("Source file not exist");
    }

    // -f [输出格式]
    // -o [输出文件名] [输入文件名] (默认输出文件名 = 原文件名)
    ProcessBuilder builder = new ProcessBuilder(buildCommand(), "-f", format, sourceFilePath);

    log.info(String.join(" ", builder.command()));
    Process process = builder.start();

    boolean complated = process.waitFor(30, TimeUnit.SECONDS);
    if (!complated) {
        // 如果超时,强制终止子进程
        process.destroyForcibly();
        throw new ServiceException("unoconv命令超时,已强制终止子进程~");
    }
}

private static String buildCommand() {
	// Windows环境需要指定unoconv.bat绝对路径
    if (System.getProperty("os.name").toLowerCase().contains("windows")) {
        return "C:/Windows/unoconv.bat";
    }
    return "unoconv";
}

五、问题记录

5.1 unoconv 版本太低导致 pptx转pdf失败

报错信息

...
/usr/lib/libreoffice/program/libuno_cppu.so.3(+0x99c4)[0x7f201960c9c4]
/usr/lib/libreoffice/program/libuno_sal.so.3(+0x44b68)[0x7f201ade6b68]
/lib/x86_64-linux-gnu/libc.so.6(+0x94b43)[0x7f201ac02b43]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x44)[0x7f201ac93bb4]
unoconv: RuntimeException during import phase:
Office probably died. Binary URP bridge disposed during call ./binaryurp/source/bridge.cxx:613
Traceback (most recent call last):
  File "/usr/bin/unoconv", line 1285, in <module>
    die(exitcode)
  File "/usr/bin/unoconv", line 1138, in die
    if convertor.desktop.getCurrentFrame():
uno.com.sun.star.lang.DisposedException: Binary URP bridge already disposed

报错原因:unoconv 0.6版本遗留问题
解决办法:升级版本
参考链接https://forum.cloudron.io/topic/10047/pptx-to-pdf-fails?lang=zh-CN
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiye丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值