由于项目需要实现office文档在浏览器里预览,找了几种方案测试了一下,先采用的openoffice进行了测试,这个方案是在linux服务器上安装openOffice然后通过openOffice命令来转换pdf。在测试转换文档过程中频繁出现openoffice服务崩溃的现象,然后就弃用了。后来又看到java通过jacob来调用com组件实现转换的方案,但是只能在windows环境下使用,而我们线上环境都是linux环境,所以果断放弃,当然也有不少收费的商业产品方案。

最后在同事的推荐下,使用openoffice的升级版libreoffice进行了实现,效果还不错。

LibreOffice安装

我的服务端的环境是centos7和libreoffice5.3,安装步骤参考这遍文章

https://blog.csdn.net/weixin_50236329/article/details/119860056

下载字体
yum groupinstall "fonts"

修改字符集
vim /etc/locale.conf
将LANG="en_US.UTF-8"修改成LANG="zh_CN.UTF-8"

最后重启
reboot

安装完成后,输入命令soffice --version,会显示如下版本信息,如果提示没有soffice命令,需要增加环境变量,或者是安装的有问题。

java调用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.io.FileNotFoundException;/*** office文件转pdf工具类*/
public class Office2PDFUtils {private static final Logger log = LoggerFactory.getLogger(Office2PDFUtils.class);/*** 将office文档转成pdf文件* @param sourcePath* @param targetPath* @throws Exception*/public static boolean word2pdf(String sourcePath, String targetPath) throws Exception {if (!new File(sourcePath).exists()) {throw new FileNotFoundException();}String command = String.format("soffice --convert-to pdf:writer_pdf_Export %s --outdir %s", sourcePath, targetPath);boolean flag = executeCommand(command);log.info("word2pdf: convert pdf complete. flag="+flag);return flag;}/*** 执行libreoffice的转换命令* @param command* @return*/public static boolean executeCommand(String command){try {long start = System.currentTimeMillis();Process process = Runtime.getRuntime().exec(command);// 返回值是子线程执行完毕的返回值,返回0表示正常结束int exitStatus = process.waitFor();log.info("executeCommand: convert pdf exitStatus= " + exitStatus);// 销毁子进程process.destroy();long end = System.currentTimeMillis();log.info("executeCommand: convert pdf cost time " + (end - start) + "ms");return exitStatus == 0;}catch (Exception e){log.error("executeCommand: runtime exec error", e);}return false;}}
public static void main(String[] args) throws Exception {String source = "/Users/lucy/test/word-testV1.0.docx";String target = "/Users/lucy/test/";InputStream inputStream = Office2PDFUtils.word2pdf(source, target);
}

总结

针对普通office文件的转换都还OK,但是有几个坑,第一个是需要转换的office文档如果文件名中包含的有空格会转换失败,需要转换的时候将空格处理掉;第二个是文档里如果有比较复杂的表格和visio元素会转换失败;后来又安装libreoffice7.2的版本测试了一下,能转换成功解决掉这些坑,但是转换的速度很慢,如果场景仅仅是后台去进行转换,对转换的时间没有要求,可以进行异步线程去处理转换,同步调用的话很可能会超时。如果公司或者项目有条件的话,可以去购买商业产品进行集成,省事节省时间,没有什么坑,有丰富的实践案例,

参考文章:【libreoffice】libreoffice实现office转pdf、html、jpg等格式数据_weixin_34032779的博客-CSDN博客

使用LibreOffice将office文档转pdf(java实现)相关推荐

  1. java命令行利用libreoffice将office文档转换为pdf文件失败的解决方案

    原因:libreoffice同时只支持两个文档转换的命令行,多于两个的命令行不会进行文档转换. 解决方案:在线程池的线程中,利用java阻塞队列BlockingQueue,设置容量为2,同时只允许两个 ...

  2. 信呼OA在centos7.4下利用LibreOffice部署Office文档本地PDF转换服务

    安装Libreoffice # yum install -y libreoffice 编辑    /include/chajian/xinhuapiChajian.php 298行 ,注释掉 #if( ...

  3. word转图片 java_Java 利用LibreOffice将Office文档转换成 PDF,进而转图片,实现在线预览功能...

    项目中需要将 Office 文档上传并实现在线预览,用到了 LibreOffice 将 Office 文档转换为 PDF 文档,然后再用 pdfbox 将 PDF 转为图片. 本文介绍借助 Libre ...

  4. LibreOffice操作office文档

    Java 利用 LibreOffice/OpenOffice 将 Office 文档(.doc/.docx .ppt/.pptx )转换成 PDF,进而转图片,实现在线预览功能 2020-02-23 ...

  5. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...

    第三步,使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice ...

  6. java零碎要点010---Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  7. C#实现office文档转换为PDF格式

    C#实现office文档转换为PDF格式 1.安装组件OfficeSaveAsPDFandXPS 需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFand ...

  8. java 预览word文档_Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  9. 使用libreoffice将office文档(word、ppt、excel)转pdf,实现在线预览

    项目需要实现局域网预览office文档的功能,之前做的在线项目,都是将文档上传到cdn,利用cdn自带的转码功能,把文档转换为pdf,然后再用pdf.js实现在线预览. 因为是局域网,没有办法上传到c ...

  10. Android实现在线预览office文档(Word,Pdf,excel,PPT.txt等格式)

    1.概述 我们都知道,Android原生并没有提供浏览office文档格式的相关Api,在安卓端想要实现在线预览office文档的功能显然很是复杂,我们手机安装QQ浏览器时,在手机打开office文档 ...

最新文章

  1. P2216 理想的正方形 单调队列 (二维)
  2. win10系统由于服务器出错翻译失败,win10系统下谷歌浏览器翻译失败如何解决
  3. 聊聊springboot2的embeded container的配置改动
  4. LightOJ - 1404 Sending Secret Messages(最小费用最大流)
  5. MsSql 生成数据文档
  6. 正则表达式的一些符号基础和实例解析
  7. IIS7.5(IIS7)配置伪静态urlrewrite
  8. 开源工具kettle中Job流程的理解
  9. 为什么root下不能使用passwd命令_基于centos7下安装部署openldap+phpldapadmin
  10. 【博客管理】短期长期计划【置顶】
  11. Asp.net MVC 移除视图引擎(WebFormViewEngine或者RazorViewEngine)
  12. 数据包接收系列 — NAPI的原理和实现
  13. oeasy教您玩转vim - 4 - # 深入帮助
  14. 【编程之美】读书笔记:寻找最大的K个数
  15. 外星人显卡拓展坞支持linux,今天,你给信仰充值了么?ALIENWARE 外星人 显卡扩展坞 简单开箱...
  16. asp.net新闻采集(wyz)
  17. Word自动生成目录页码靠右对齐
  18. 睿智的目标检测21——如何调用摄像头进行目标检测
  19. 如何在网站上增加Google analytics,手把手操作
  20. 程序员不是工程师吗,他们之间有什么区别?

热门文章

  1. 免费天气预报接口返回15天的天气JSON格式
  2. Pytorch环境搭建
  3. 阿里云服务器被恶意程序攻击
  4. 用户输入错误验证码错误三次后,锁定该用户3分钟 redis 使用案列
  5. 深度研报:回顾「NFT」和「元宇宙」冰火两重天的11月
  6. 如何快速进行十进制二进制转换
  7. 外卖行业现状分析_中国在线餐饮外卖行业分析报告(附全文)
  8. Excel树状数据绘制导出
  9. jpeg图片格式详解
  10. python解析mht文件_[原创].mht文件图片解析工具