使用LibreOffice将office文档转pdf(java实现)
由于项目需要实现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实现)相关推荐
- java命令行利用libreoffice将office文档转换为pdf文件失败的解决方案
原因:libreoffice同时只支持两个文档转换的命令行,多于两个的命令行不会进行文档转换. 解决方案:在线程池的线程中,利用java阻塞队列BlockingQueue,设置容量为2,同时只允许两个 ...
- 信呼OA在centos7.4下利用LibreOffice部署Office文档本地PDF转换服务
安装Libreoffice # yum install -y libreoffice 编辑 /include/chajian/xinhuapiChajian.php 298行 ,注释掉 #if( ...
- word转图片 java_Java 利用LibreOffice将Office文档转换成 PDF,进而转图片,实现在线预览功能...
项目中需要将 Office 文档上传并实现在线预览,用到了 LibreOffice 将 Office 文档转换为 PDF 文档,然后再用 pdfbox 将 PDF 转为图片. 本文介绍借助 Libre ...
- LibreOffice操作office文档
Java 利用 LibreOffice/OpenOffice 将 Office 文档(.doc/.docx .ppt/.pptx )转换成 PDF,进而转图片,实现在线预览功能 2020-02-23 ...
- 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...
第三步,使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice ...
- java零碎要点010---Java实现office文档与pdf文档的在线预览功能
最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...
- C#实现office文档转换为PDF格式
C#实现office文档转换为PDF格式 1.安装组件OfficeSaveAsPDFandXPS 需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFand ...
- java 预览word文档_Java实现office文档与pdf文档的在线预览功能
最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...
- 使用libreoffice将office文档(word、ppt、excel)转pdf,实现在线预览
项目需要实现局域网预览office文档的功能,之前做的在线项目,都是将文档上传到cdn,利用cdn自带的转码功能,把文档转换为pdf,然后再用pdf.js实现在线预览. 因为是局域网,没有办法上传到c ...
- Android实现在线预览office文档(Word,Pdf,excel,PPT.txt等格式)
1.概述 我们都知道,Android原生并没有提供浏览office文档格式的相关Api,在安卓端想要实现在线预览office文档的功能显然很是复杂,我们手机安装QQ浏览器时,在手机打开office文档 ...
最新文章
- P2216 理想的正方形 单调队列 (二维)
- win10系统由于服务器出错翻译失败,win10系统下谷歌浏览器翻译失败如何解决
- 聊聊springboot2的embeded container的配置改动
- LightOJ - 1404 Sending Secret Messages(最小费用最大流)
- MsSql 生成数据文档
- 正则表达式的一些符号基础和实例解析
- IIS7.5(IIS7)配置伪静态urlrewrite
- 开源工具kettle中Job流程的理解
- 为什么root下不能使用passwd命令_基于centos7下安装部署openldap+phpldapadmin
- 【博客管理】短期长期计划【置顶】
- Asp.net MVC 移除视图引擎(WebFormViewEngine或者RazorViewEngine)
- 数据包接收系列 — NAPI的原理和实现
- oeasy教您玩转vim - 4 - # 深入帮助
- 【编程之美】读书笔记:寻找最大的K个数
- 外星人显卡拓展坞支持linux,今天,你给信仰充值了么?ALIENWARE 外星人 显卡扩展坞 简单开箱...
- asp.net新闻采集(wyz)
- Word自动生成目录页码靠右对齐
- 睿智的目标检测21——如何调用摄像头进行目标检测
- 如何在网站上增加Google analytics,手把手操作
- 程序员不是工程师吗,他们之间有什么区别?