javaWeb文档预览之office转pdf(附详细代码)
最近由于项目的需要一直在看文档转换的开源项目,包括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(附详细代码)相关推荐
- 在线文档预览方案-office web apps续篇
上一篇在线文档预览方案-office web apps发布后收到很多网友的留言提问,所以准备再写一篇,一来介绍一下域控服务器安装,总结一下大家问的多的问题,二来宣传预览服务安装与技术支持的事情. 阅读 ...
- 在线文档预览方案-office web apps
原文:在线文档预览方案-office web apps 最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现 ...
- [转载]在线文档预览方案-Office Web Apps
最近在做项目时,要在手机端实现在线文档预览的功能.于是百度了一下实现方案,大致是将文档转换成pdf,然后在通过插件实现预览.这些方案没有具体实现代码,也没有在线预览的地址,再加上项目时间紧迫.只能考虑 ...
- 在线文档预览解决方案-Office Web Apps在Windows Server 2008 R2部署教程
由于接触到的服务器一般安装较多的是Windows Server 2008 R2版本的服务器,在此记录一下部署过程中踩得坑 优势:可以同时支持pc端和手机端,支持文件类型包括 doc,ppt,xls,d ...
- java office文件加水印_文档预览加水印——或可一用的防泄密方式
给文件加水印是常见的一种宣示版权的方式.像Office.WPS都自带加水印功能,能够给文档加上"保密"."严禁复制"这样的水印. 在多可系统中,也有这么一个添加 ...
- 跨平台Office文档预览原生插件,非腾讯X5,支持离线,稳定高可用
引言 2023年4月13日零时起,腾讯浏览服务内核文档能力正式下线,要实现真正离线文档预览,于是有了这边文章. 前面写了多篇关于<跨平台文件在线预览解决方案>,不管使用pdf.js.Lib ...
- 用Ruby on Rails实现适应各种平台的在线Office文档预览
前言 在许多Web应用中都需要预览文档的功能.而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有可能是iOS系统的iPad.一般来说,要预览的文档通常是主流的Offi ...
- 用 Ruby on Rails 实现适应各种平台的在线 Office 文档预览
http://ruby-china.org/topics/17309 前言 在许多Web应用中都需要预览文档的功能.而用户可能用不同的设备访问Web应用,可能是装有Windows系统的PC台式机,也有 ...
- 纯前端文档预览,还要支持所有主流格式,有这一篇就足够了
写在前面 纯前端的文档预览功能,是非常常见的需求,但就是这么简单的需求,难住了许多可爱的小伙伴们.别急,先访问一下解决方案,给你一个惊喜,再往下看: 文件在线预览DEMO 服务器文件预览DEMO 20 ...
- wps在线预览接口_在线文档预览(干货篇)
目前市面上的文档预览产品确实是五花八门,总的来说分两类产品:免费的产品很少也很局限,收费的产品很多很丰富但有坑!(这个坑嘛,大家都懂) 部分公司会选择自制文档预览功能,其实分析比较自制和外购两种方案, ...
最新文章
- 《Unreal Engine 4蓝图可视化编程》一1.6 改变目标方向
- Request method 'GET' not supported解决方式
- windows 2008 R2远程桌面无法本地复制文件到远程解决
- 从MySQL得到最大的性能
- 转 ajax.dll 与 ajaxpro.dll的用法
- 数据可视化大屏有哪些优势
- Mysql 自动增长 重置
- ENVI遥感处理(9):遥感影像镶嵌和图像裁剪
- 圆角矩形大小怎么调整html,html圆角矩形
- 单TYPE-C口 可支持快充又可传输USB2.0数据方案
- 2177 找到和为给定整数的三个连续整数(思维题)
- 记一次用python selenium 通过chrome+chromedriver 实现公司内网上网自动登入认证、上班自动登入打卡python脚本笔记
- GMap地图的加载和现实
- 陳三甲网络笔记:即使你摆正了姿势,也不一定能赚到钱!
- 认识消防报警联网中CAN光纤转换器的光纤接口和配套光纤线缆
- ArcGIS下图像矢量化的基本步骤
- fir.im Weekly - Mobile developer 利器分享 1
- linux的usb驱动失败,linux2.6.24下usb驱动完成情况及问题解决
- 一本阿里开发手册,很简单,却让我如此沉迷
- 使用Java及jsoup爬取链家北京二手房房价数据
热门文章
- 第2章 Linux内核模块
- 华为鸿蒙麒麟玉兔_鸿蒙、麒麟、鲲鹏……这是属于中华的浪漫
- html select文字居中显示,用CSS将select/option文本居中
- 学北邮计算机未来四十岁,2020年北京邮电大学计算机研究生保研心得
- macmini更换硬盘重装系统后安装win10双系统
- GLUE数据集免费下载 (MNLI, QQP, QNLI, SST-2, CoLA, STS-B, MRPC, RTE, WNLI)
- GIS招聘 | 云南省自然资源厅所属事业单位
- Linux 通过关键字查询文档内容
- LaTex 常用数学公式符号速记
- 茎叶图、箱图是什么,如何用SPSS实现?(图文)