Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

  • 一、OpenOffice
    • 1.1 下载地址
    • 1.2 JodConverter
    • 1.3 新建实体类PDFDemo
  • 二、实践代码二
  • 三、linux环境下安装 openOffice 并启动服务
  • 四、Java使用Openoffice将word、ppt转换为PDF
    • 4.1 Word转换
    • 4.2 运行代码
    • 4.3 Word、ppt转Html
    • 4.4 Maven配置

相关博文来源:
简书:java通过openOffice实现word,excel,ppt转成pdf实现在线预览
博客园:java 如何将 word,excel,ppt如何转pdf --openoffice (1)
博客园:Java使用Openoffice将word、ppt转换为PDF
博客园:linux环境下安装 openOffice 并启动服务

一、OpenOffice

OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)、和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用、及推广它。

1.1 下载地址

http://www.openoffice.org/

1.2 JodConverter

jodconverter-2.2.2.zip 下载地址:
http://sourceforge.net/projects/jodconverter/files/JODConverter/

下载openOffce软件,安装相应系统版本,这里以windows为例
添加maven依赖:

<dependency><groupId>com.artofsolving</groupId><artifactId>jodconverter</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.artofsolving.jodconverter</groupId><artifactId>jodconverter-core</artifactId><version>3.0-beta-4-jahia2</version></dependency>

第二个jar包可能有些资源库没有,下载后,直接放在项目中,直接在pom中加载项目内部jar包即可。

 <dependency><groupId>org.artofsolving.jodconverter</groupId><artifactId>jodconverter-core</artifactId><version>1.0</version><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/jodconverter-core.jar</systemPath>
</dependency>

1.3 新建实体类PDFDemo

import java.io.File;
import java.net.ConnectException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;public class PDFDemo {public static boolean officeToPDF(String sourceFile, String destFile) {try {File inputFile = new File(sourceFile);if (!inputFile.exists()) {// 找不到源文件, 则返回falsereturn false;}// 如果目标路径不存在, 则新建该路径File outputFile = new File(destFile);if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();}//如果目标文件存在,则删除if (outputFile.exists()) {outputFile.delete();}// DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();// OpenOffice安装在本地环境的目录String officeHome = "D:\\profiles\\openOfice4";config.setOfficeHome(officeHome);config.setPortNumber(8100);config.setTaskExecutionTimeout(1000 * 60 * 5);// 设置任务执行超时为5分钟config.setTaskQueueTimeout(1000 * 60 * 60 * 24);// 设置任务队列超时为24小时OfficeManager officeManager = config.buildOfficeManager();officeManager.start();OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);if (inputFile.exists()) {// 进行PDF格式的转换converter.convert(inputFile, outputFile);}officeManager.stop();return true;} catch (Exception e) {e.printStackTrace();}return false;}public static void main(String[] args) {boolean flag = officeToPDF("D:\\testE.xls", "D:\\test3.pdf");System.out.println(flag);}
}

上面officceToPDF方法的第一个参数是原文件路径,第二个参数是输出文件路径,后缀名改成html就转成html,后缀名是pdf就转成pdf

上面的方法比较浪费性能 每次都要打开关闭,可以在服务器端开启soffice服务的方式直接调用连接会比较可行;
去到安装目录的program文件夹 cmd打开,运行

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard

可以上图看到进程已开启
以下代码可调用:

public static boolean officeToPDF(String sourceFilePath, String destFilePath) {boolean flag = false;//try {File inputFile = new File(sourceFilePath);if (!inputFile.exists()) {// 找不到源文件, 则返回falsereturn flag;}// 如果目标路径不存在, 则新建该路径File outputFile = new File(destFilePath);if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();}// 如果目标文件存在,则删除if (outputFile.exists()) {outputFile.delete();}// DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");try {OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);connection.connect();DocumentConverter converter = new OpenOfficeDocumentConverter(connection);if (inputFile.exists()) {// 进行PDF格式的转换converter.convert(inputFile, outputFile);}connection.disconnect();flag = true;} catch (Exception e) {flag = false;e.printStackTrace();}return flag;}

二、实践代码二

package indi.johnny.convert;import java.io.File;
import java.io.FileNotFoundException;import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;//转换文档为pdf
public class OpenOfficePdfConvert {/*** @param args*/private static OfficeManager officeManager;private static String OFFICE_HOME = "D:/software/OpenOffice 4/";private static int port[] = { 8100 };public void convert2PDF(String inputFile, String outputFile) throws FileNotFoundException {startService();System.out.println("进行文档转换转换:" + inputFile + " --> " + outputFile);OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);converter.convert(new File(inputFile), new File(outputFile));stopService();System.out.println();}// 打开服务器public static void startService() {DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();try {System.out.println("准备启动服务....");configuration.setOfficeHome(OFFICE_HOME);// 设置OpenOffice.org安装目录configuration.setPortNumbers(port); // 设置转换端口,默认为8100configuration.setTaskExecutionTimeout(1000 * 60 * 5L);// 设置任务执行超时为5分钟configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);// 设置任务队列超时为24小时officeManager = configuration.buildOfficeManager();officeManager.start(); // 启动服务System.out.println("office转换服务启动成功!");} catch (Exception ce) {System.out.println("office转换服务启动失败!详细信息:" + ce);}}// 关闭服务器public static void stopService() {System.out.println("关闭office转换服务....");if (officeManager != null) {officeManager.stop();}System.out.println("关闭office转换成功!");}public static void main(String[] args) throws Exception {String path = "C:/Users/johnny/Desktop/文档/20170420/test/001/";OpenOfficePdfConvert opc = new OpenOfficePdfConvert();opc.convert2PDF(path+"1.docx", path+"1.pdf");}}

将代码中的 OFFICE_HOME换成自己的openoffice的安装路径,端口8100不用动。

三、linux环境下安装 openOffice 并启动服务

  1. .http://www.openoffice.org/zh-cn/download/ 去官网链接下载linux版本的openOffice 以4.1.5 版本为例。
  2. 将压缩包上传至服务器上,并进行解压安装。
1  tar -zxvf  对应的压缩包名字
2  cd 进入解压后的 /zh-cn/RPMS
3  yum localinstall *.rpm
4  cd desktop-integration
5  rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm

默认会安装在/opt目录下。

1 /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard  临时启动
2 nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &  后台启动

四、Java使用Openoffice将word、ppt转换为PDF

4.1 Word转换

启动OpenOffice的服务

进入openoffice安装目录,通过cmd启动一个soffice服务,启动的命令是

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"。

如果觉得后台运行OpenOffice服务比较麻烦,可以通过

4.2 运行代码

public class PDFDemo {public static boolean officeToPDF(String sourceFile, String destFile) {try {File inputFile = new File(sourceFile);if (!inputFile.exists()) {// 找不到源文件, 则返回falsereturn false;}// 如果目标路径不存在, 则新建该路径File outputFile = new File(destFile);if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();}//如果目标文件存在,则删除if (outputFile.exists()) {outputFile.delete();}DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);connection.connect();//用于测试openOffice连接时间System.out.println("连接时间:" + df.format(new Date()));DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);converter.convert(inputFile, outputFile);//测试word转PDF的转换时间System.out.println("转换时间:" + df.format(new Date()));connection.disconnect();return true;} catch (ConnectException e) {e.printStackTrace();System.err.println("openOffice连接失败!请检查IP,端口");} catch (Exception e) {e.printStackTrace();}return false;}public static void main(String[] args) {officeToPDF("E:\\test.docx", "E:\\test.pdf");}
}

4.3 Word、ppt转Html

只需要将后缀名从.pdf改为.html即可。

public static void main(String[] args) {officeToPDF("E:\\test.docx", "E:\\test.html");
}

4.4 Maven配置

Maven依赖

<dependency><groupId>com.artofsolving</groupId><artifactId>jodconverter</artifactId><version>2.2.1</version>
</dependency>
<dependency><groupId>org.openoffice</groupId><artifactId>jurt</artifactId><version>3.0.1</version>
</dependency>
<dependency><groupId>org.openoffice</groupId><artifactId>ridl</artifactId><version>3.0.1</version>
</dependency>
<dependency><groupId>org.openoffice</groupId><artifactId>juh</artifactId><version>3.0.1</version>
</dependency>
<dependency><groupId>org.openoffice</groupId><artifactId>unoil</artifactId><version>3.0.1</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.4.3</version>
</dependency>

Maven只有 2.2.1版本,2.2.1版本有一个问题,那就是不兼容docx和pptx,如果你们不使用jodconverter-2.2.2 中lib,而想要使用2.2.1版本,需要修改一下 BasicDocumentFormatRegistry 类中的 getFormatByFileExtension方法:

新建包 com.artofsolving.jodconverter
新建类BasicDocumentFormatRegistry,复制下面代码
package com.artofsolving.jodconverter;

/*** @author 李文浩* @date 2017/12/25*/import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class BasicDocumentFormatRegistry implements DocumentFormatRegistry {private List documentFormats = new ArrayList();public BasicDocumentFormatRegistry() {}public void addDocumentFormat(DocumentFormat documentFormat) {this.documentFormats.add(documentFormat);}protected List getDocumentFormats() {return this.documentFormats;}public DocumentFormat getFormatByFileExtension(String extension) {if (extension == null) {return null;} else {if (extension.indexOf("doc") >= 0) {extension = "doc";}if (extension.indexOf("ppt") >= 0) {extension = "ppt";}if (extension.indexOf("xls") >= 0) {extension = "xls";}String lowerExtension = extension.toLowerCase();Iterator it = this.documentFormats.iterator();DocumentFormat format;do {if (!it.hasNext()) {return null;}format = (DocumentFormat)it.next();} while(!format.getFileExtension().equals(lowerExtension));return format;}}public DocumentFormat getFormatByMimeType(String mimeType) {Iterator it = this.documentFormats.iterator();DocumentFormat format;do {if (!it.hasNext()) {return null;}format = (DocumentFormat)it.next();} while(!format.getMimeType().equals(mimeType));return format;}
}

下面是增加的部分,仅仅增加了将docx按照doc的处理方式处理。而2.2.2版本已经默认增加了。

if (extension.indexOf("doc") >= 0) {extension = "doc";
}
if (extension.indexOf("ppt") >= 0) {extension = "ppt";
}
if (extension.indexOf("xls") >= 0) {extension = "xls";
}

Java通过openOffice实现word,excel,ppt转成pdf实现在线预览相关推荐

  1. Java使用Openoffice将word、ppt转换为PDF

    最近项目中要实现WORD的文件预览功能,我们可以通过将WORD转换成PDF或者HTML,然后通过浏览器预览. OpenOffice OpenOffice.org 是一套跨平台的办公室软件套件,能在 W ...

  2. java将office文档,word,ppt,pdf文档转换成swf文件在线预览

    java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...

  3. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

  4. ppt转换成pdf转换器在线

    ppt转换成pdf转换器在线 什么是ppt在线转换pdf转换器?有很多网友不希望在电脑上安装一些软件,那在线转换绝对是个不错的选择.何为在线转换器?ppt转换成pdf转换器在线转换怎么转?迅捷ppt转 ...

  5. html怎么转换到百度,类似百度文库在线预览文档flash版(支持word、excel、ppt、pdf)+在线预览文档html版...

    类似百度文库在线预览文档flash版(支持word.excel.ppt.pdf)+在线预览文档html版 (1).将文档转换为html,只支持支持office文档 (2).将文档转换为flash,实现 ...

  6. 使用PageOffice实现文档(word,excel,pdf)在线预览编辑

    最近发现一款不错的插件的PageOffice,地址是:http://www.zhuozhengsoft.com/Technical/ 他可以实现word,excel.pdf在线预览以及在线编辑.虽然商 ...

  7. java word上传下载_JSP实现word文档的上传,在线预览,下载

    前两天帮同学实现在线预览word文档中的内容,而且需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了.希望得到各位大神的指教.下面我就具体谈谈自己的实现过程,总结一 ...

  8. JAVA实现FTP服务器上文件上传下载以及文件在线预览

    (一)介绍文件上传下载: (1)前端思路: 用formData封装好file以及相关参数,然后l利用ajax请求往后台传数据 html的代码:<input id="cm_file&qu ...

  9. JSP实现word文档的上传,在线预览,下载

    前两天帮同学实现在线预览word文档中的内容,而且需要提供可以下载的链接!在网上找了好久,都没有什么可行的方法,只得用最笨的方法来实现了.希望得到各位大神的指教.下面我就具体谈谈自己的实现过程,总结一 ...

最新文章

  1. opengl库区分:glut、freeglut、glfw、glew、gl3w、glad
  2. 安卓手机网页打开淘宝总是弹出应用市场
  3. JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )(转发)
  4. Java集合Stack源码深入解析
  5. tensorflow随笔-条件语句-tf.cond
  6. PHP关键字this指向当前对象指针
  7. 在Windows XP 中使用Active Directory(活动目录)
  8. 机器学习笔记—再谈广义线性模型
  9. Linux 总线、设备、驱动模型的探究
  10. 算法基础——列表查找
  11. ​网易首支 AI 生成歌曲《醒来》正式发布;FSF :苹果 OCSP 事故在道德上不可接受;CentOS 8.3 发布|极客头条...
  12. java的代码大全_java代码大全
  13. trans系列是sci几区_怎么确定SCI论文期刊是几区的?
  14. 蒙特卡罗方法C语言求定积分,蒙特卡罗方法计算定积分
  15. [数据库] 一文搞懂case when所有使用场景
  16. 如何把PDF中A4页面拆分成两张A5来打印
  17. EXCEL描述统计输出详解:标准误、置信度、偏度、峰度和JB检验
  18. K202 及 K216 款脱机烧录器 固件升级方法 支持STM8 STM32 Nordic 芯片 EFM8 EFM32 C8051F 等芯片
  19. C++ :四种强制类型转换
  20. 业务模块卸载失败定位过程

热门文章

  1. 低调,中国的FPGA到底有多强?
  2. 20200524西瓜视频的视频下载打开的步骤(未完成)
  3. hdu1754(线段树单点更新)
  4. [曲苑杂谈]mac\windows phpstorm快捷键
  5. 高德地图——地图图层
  6. 2023 年 5 大人工智能 (AI) 趋势
  7. 在数控机床上加工零件,主要取决于加工程序
  8. 基于Python的中国影业数据分析
  9. JAVA实现打字小游戏
  10. 5G NR Polar码系统编码和非系统编码(二)