自学内容网 自学内容网

Springboot整合jodconverter调用LibreOffice/OpenOffice

下载:
LibreOffice下载地址:https://www.libreoffice.org/
OpenOffice下载地址:https://www.openoffice.org/download/index.html
配置系统环境变量
注1:将soffice.exe所在目录:C:\Program Files (x86)\OpenOffice 4\program (修改环境变量或直接在该目录下使用无头(headless)模式启动命令)
注2:officeHome配置的路径为:LibreOffice/OpenOffice安装的根目录,即program的上级目录。
注3:在生产环境中,更推荐将OpenOffice配置为Windows服务或使用其他方法来确保它在后台持续运行。
使用碰到的问题
整合jodconverter运行项目报错:
启动项目报错:Invalid officeHome: it doesn't contain soffice.bin: C:\Program Files (x86)\OpenOffice 4\program
错误原因:OpenOffice在安装时,有提示安装包解压目录,此路径只是将安装包里面的东西临时放在指定的目录,实际的安装目录会默认安装在C:\Program Files (x86)\OpenOffice 4路径下,而非前面指定的目录。
解决办法:yaml文件的office-home配置为C:\Program Files (x86)\OpenOffice 4即可。

执行了转换代码但是格式没有转换过来:
无界面启动LibreOffice/OpenOffice服务。
window:soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard &
Linux:./soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard &

乱码问题:
加字体。
LibreOffice无界面启动命令
1、配置安装LibreOffice/OpenOffice目录下的program路径到Path环境变量里,因为需要用到soffice命令。
2、命令行无界面启动LibreOffice/OpenOffice服务,命令行是一样的,只是文件路径不一样:
window:soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard &
Linux:./soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -nofirststartwizard &
注意:测试及生产环境配置开机自启动服务。

3、命令行测试word转pdf:
soffice --headless --convert-to pdf --outdir ./ ./log.docx
命令解释:soffice --headless --convert-to pdf --outdir <输出目录> <输入文件>
可能碰到的问题:转换任务时会弹出“等待连接打印机”的提示,需要关闭之后才能转换成功,这是window系统环境问题,需要单独解决下,解决方式如下:
解决办法:开始菜单 -> 设备和打印机 -> 找到名为“Microsoft Print to PDF”的打印机,右键设置为默认打印机。
pom引入依赖
<!-- office文件预览及格式转换相关 -->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>4.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId><!-- jodconverter-local:调用本地服务, jodconverter-remote:调用远程 -->
            <version>4.4.2</version>
        </dependency>
yaml添加依赖
# jodconverter配置
jodconverter: #位置与spring同级
  local:
    enabled: true
    # office-home: C:\\Program Files\\LibreOffice  # 一般不需要配置,如果非默认安装路径,则配置到LibreOffice或OpenOffice的安装根目录。
    # 端口(线程)
    portNumbers: [8101,8102,8103]
    maxTasksPerProcess: 100
    # 任务执行的超时时间
    task-execution-timeout: 360000
    # 任务队列的超时时间
    task-queue-timeout: 360000
    # 一个进程的超时时间
    process-timeout: 360000

注意:office-home配置项通常不是必需的,除非你的OpenOffice安装路径不在默认位置,并且JodConverter需要访问OpenOffice的可执行文件。然而,JodConverter Spring Boot Starter可能会自动检测OpenOffice的安装,因此你可能不需要手动指定office-home。
ServiceImpl中调用:
@Resource
    private DocumentConverter documentConverter;

// 可以传文件,也可以传字节流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
documentConverter.convert(new ByteArrayInputStream(resultByte)).to(baos).as(DefaultDocumentFormatRegistry.PDF).execute();
resultByte = baos.toByteArray();

原文地址:https://blog.csdn.net/chendi19881217/article/details/143915740

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!