最近由于项目的需要一直在看文档转换的开源项目,包括officewebapp、OpenOffice、Libreoffice。后来发现officewebapp在各种在线文库的预览中比较常见,但是在实际的部署中需要的安装配置比较多,并且对系统有要求所以放弃。由于LibreOffice找到的参考资料比较少,最后选择了OpenOffice。下面就来详细介绍一下使用OpenOffice进行文档转换的开发过程:
1、OpenOffice下载安装:
下载地址:https://www.openoffice.org/download/index.html
我这里使用的是4.1.3版本的OpenOffice,下载完后是一个可执行程序,直接安装就好。
2、工程结构
开发环境:IDEA15+JDK1.8+Maven+SpringBoot


ConvertToPDF.java负责调用OpenOffice将Office转化成pdf文档
TestController.java负责调用转换的接口和之前PDF预览的相关接口
static包下的是pdf.js的相关包
3、需要依赖的Maven库

<dependency><groupId>com.artofsolving</groupId><artifactId>jodconverter-maven-plugin</artifactId><version>2.2.1</version></dependency><!-- https://mvnrepository.com/artifact/com.aspose/aspose-words --><dependency><groupId>org.artofsolving.jodconverter</groupId><artifactId>jodconverter-core</artifactId><version>3.0-beta-4</version><!--使用Maven导入不成功,这个库是手动导入的--></dependency><!-- https://mvnrepository.com/artifact/org.openoffice/unoil --><dependency><groupId>org.openoffice</groupId><artifactId>unoil</artifactId><version>3.2.1</version></dependency><!-- https://mvnrepository.com/artifact/org.openoffice/juh --><dependency><groupId>org.openoffice</groupId><artifactId>juh</artifactId><version>3.2.1</version></dependency><!-- https://mvnrepository.com/artifact/org.openoffice/jurt --><dependency><groupId>org.openoffice</groupId><artifactId>jurt</artifactId><version>3.2.1</version></dependency><!-- https://mvnrepository.com/artifact/org.openoffice/ridl --><dependency><groupId>org.openoffice</groupId><artifactId>ridl</artifactId><version>3.2.1</version></dependency>

4、相关代码
(1)OpenOffice配置

    private  OfficeManager officeManager;public static String OFFICE_HOME = "C:\\Program Files (x86)\\OpenOffice 4";//本机OpenOffice安装目录private int port = 8100;//默认使用端口

(2)启动服务:

 public  void startService(int i) {DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();try {//先关闭再启动// System.out.println("准备启动服务....");//设置OpenOffice.org安装目录configuration.setOfficeHome(OFFICE_HOME);//设置转换端口configuration.setPortNumbers(i); //设置任务执行超时30分钟configuration.setTaskExecutionTimeout(1000 * 60 * 5L);//设置任务队列超时24小时configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);officeManager = configuration.buildOfficeManager();officeManager.start();    //启动服务System.out.println("office转换服务启动成功!");} catch (Exception ce) {System.out.println("office转换服务启动失败!详细信息:" + ce);}}

(3)关闭服务:

public  void stopService() {//  System.out.println("关闭office转换服务....");if (officeManager != null) {officeManager.stop();}System.out.println("关闭office转换成功!");}

(4)文档转换

 public  void orgconvert2PDF(String inputFile) {//pdfFile是目标文件  odtFile是中间文件String pdfFile = inputFile.substring(0, inputFile.lastIndexOf("."))+"_" + System.currentTimeMillis() + ".pdf";String odtFile = inputFile.substring(0, inputFile.lastIndexOf("."))+"_" + System.currentTimeMillis() + ".odt";File odt = new File(odtFile);if (odt.exists()) {System.out.println("odt文件已存在!");inputFile = odtFile;} else {try {File input = new File(inputFile);FileUtils.copyFile(input, odt);inputFile = odtFile;} catch (Exception e) {System.out.println("文档不存在!");e.printStackTrace();}}try {long now = System.currentTimeMillis();startService(port);System.out.println( "  进行文档转换转换:" + inputFile + " --> " + pdfFile);OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);converter.convert(new File(inputFile), new File(pdfFile));//转化完成关闭服务stopService();odt.delete();long old = System.currentTimeMillis();System.out.println("ConvertSuccess Start = "+ old + ", end = "+ now +  ", "+ " UsedTime = " + (old - now) / 1000.0 + " S");//System.out.println(" 文档转换成功....end");} catch (Exception e) {stopService();System.out.println(  "文档转换失败....error");}}

(5)多线程调用

        String str1 = "D:\\TestFiles\\1\\1.docx";String str2 = "D:\\TestFiles\\1\\2.docx";//多线程调用ConvertToPDF convert1 = new ConvertToPDF(str1,8100);Thread thread1 = new Thread( convert1 );thread1.start();ConvertToPDF convert2 = new ConvertToPDF(str2,8101);Thread thread2 = new Thread( convert2 );thread2.start();

在jodconverter3.0-beta-4里已经支持启动多个OpenOffice实例进行转码,这里的多线程是通过同时在多个线程里面启动多个不同端口的OpenOfiice实例进行转码实现。如果是一个端口,也可以进行多文件的转化,只是在添加多个文件的时候,OpenOffice会将任务文件添加到任务队列依次执行。

文档预览之PDF.js实现PDF文件跨域预览(附测试实例):
http://blog.csdn.net/coding13/article/details/76930672
文档预览之OpenOfiice踩过的坑:
http://blog.csdn.net/coding13/article/details/77246339

参考博文
https://segmentfault.com/a/1190000006789644(Java中常用的几种DOCX转PDF方法,包含Libreoffice的使用)
代码下载:
http://download.csdn.net/download/coding13/9936039

javaWeb文档预览之office转pdf(附详细代码)相关推荐

  1. 在线文档预览方案-office web apps续篇

    上一篇在线文档预览方案-office web apps发布后收到很多网友的留言提问,所以准备再写一篇,一来介绍一下域控服务器安装,总结一下大家问的多的问题,二来宣传预览服务安装与技术支持的事情. 阅读 ...

  2. 在线文档预览方案-office web apps

    原文:在线文档预览方案-office web apps 最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现 ...

  3. [转载]在线文档预览方案-Office Web Apps

    最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...

  4. 在线文档预览解决方案-Office Web Apps在Windows Server 2008 R2部署教程

    由于接触到的服务器一般安装较多的是Windows Server 2008 R2版本的服务器,在此记录一下部署过程中踩得坑 优势:可以同时支持pc端和手机端,支持文件类型包括 doc,ppt,xls,d ...

  5. java office文件加水印_文档预览加水印——或可一用的防泄密方式

    给文件加水印是常见的一种宣示版权的方式.像Office.WPS都自带加水印功能,能够给文档加上"保密"."严禁复制"这样的水印. 在多可系统中,也有这么一个添加 ...

  6. 跨平台Office文档预览原生插件,非腾讯X5,支持离线,稳定高可用

    引言 2023年4月13日零时起,腾讯浏览服务内核文档能力正式下线,要实现真正离线文档预览,于是有了这边文章. 前面写了多篇关于<跨平台文件在线预览解决方案>,不管使用pdf.js.Lib ...

  7. 用Ruby on Rails实现适应各种平台的在线Office文档预览

    前言 在许多Web应用中都需要预览文档的功能.而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有可能是iOS系统的iPad.一般来说,要预览的文档通常是主流的Offi ...

  8. 用 Ruby on Rails 实现适应各种平台的在线 Office 文档预览

    http://ruby-china.org/topics/17309 前言 在许多Web应用中都需要预览文档的功能.而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有 ...

  9. 纯前端文档预览,还要支持所有主流格式,有这一篇就足够了

    写在前面 纯前端的文档预览功能,是非常常见的需求,但就是这么简单的需求,难住了许多可爱的小伙伴们.别急,先访问一下解决方案,给你一个惊喜,再往下看: 文件在线预览DEMO 服务器文件预览DEMO 20 ...

  10. wps在线预览接口_在线文档预览(干货篇)

    目前市面上的文档预览产品确实是五花八门,总的来说分两类产品:免费的产品很少也很局限,收费的产品很多很丰富但有坑!(这个坑嘛,大家都懂) 部分公司会选择自制文档预览功能,其实分析比较自制和外购两种方案, ...

最新文章

  1. 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向
  2. Request method 'GET' not supported解决方式
  3. windows 2008 R2远程桌面无法本地复制文件到远程解决
  4. 从MySQL得到最大的性能
  5. 转 ajax.dll 与 ajaxpro.dll的用法
  6. 数据可视化大屏有哪些优势
  7. Mysql 自动增长 重置
  8. ENVI遥感处理(9):遥感影像镶嵌和图像裁剪
  9. 圆角矩形大小怎么调整html,html圆角矩形
  10. 单TYPE-C口 可支持快充又可传输USB2.0数据方案
  11. 2177 找到和为给定整数的三个连续整数(思维题)
  12. 记一次用python selenium 通过chrome+chromedriver 实现公司内网上网自动登入认证、上班自动登入打卡python脚本笔记
  13. GMap地图的加载和现实
  14. 陳三甲网络笔记:即使你摆正了姿势,也不一定能赚到钱!
  15. 认识消防报警联网中CAN光纤转换器的光纤接口和配套光纤线缆
  16. ArcGIS下图像矢量化的基本步骤
  17. fir.im Weekly - Mobile developer 利器分享 1
  18. linux的usb驱动失败,linux2.6.24下usb驱动完成情况及问题解决
  19. 一本阿里开发手册,很简单,却让我如此沉迷
  20. 使用Java及jsoup爬取链家北京二手房房价数据

热门文章

  1. 第2章 Linux内核模块
  2. 华为鸿蒙麒麟玉兔_鸿蒙、麒麟、鲲鹏……这是属于中华的浪漫
  3. html select文字居中显示,用CSS将select/option文本居中
  4. 学北邮计算机未来四十岁,2020年北京邮电大学计算机研究生保研心得
  5. macmini更换硬盘重装系统后安装win10双系统
  6. GLUE数据集免费下载 (MNLI, QQP, QNLI, SST-2, CoLA, STS-B, MRPC, RTE, WNLI)
  7. GIS招聘 | 云南省自然资源厅所属事业单位
  8. Linux 通过关键字查询文档内容
  9. LaTex 常用数学公式符号速记
  10. 茎叶图、箱图是什么,如何用SPSS实现?(图文)