最近项目中要实现附件的文件预览功能,其实想想不难实现!

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

OpenOffice org 的 API 以 UNO (UniversalNetwork Object) 写成,所以本身是电脑语言中立的。现在来说,OpenOffice org主要是以 C++ 撰写的,但也能以 Java(TM) 来撰写。

1. 需要用的软件

OpenOffice 下载地址http://www.openoffice.org/

JodConverter 下载地址http://sourceforge.net/projects/jodconverter/files/JODConverter/,也可以直接从附件里面下载

2.启动OpenOffice的服务

我到网上查如何利用OpenOffice进行转码的时候,都是需要先用cmd启动一个soffice服务,启动的命令是:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"。

但是实际上,对于我的项目,进行转码只是偶尔进行,然而当OpenOffice的转码服务启动以后,该进程(进程名称是soffice.exe)会一直存在,并且大约占100M的内存,感觉非常浪费。于是我就想了一个办法,可以将执行该服务的命令直接在JAVA代码里面调用,然后当转码完成的时候,直

当前openoffice安装在ubantu Linux

查看文档以及百度,其最重要的部分就在于下面3句

连接OpenOffice

OpenOfficeConnection connection = new SocketOpenOfficeConnection('127.0.0.1',8100);

connection.connect();

DocumentConverter converter = new OpenOfficeDocumnetConverter(connection);

word转PDF

converter.converter(inputFile,outputFile);

需注意源文件一定是要存在的可以使用exists()判断一下

下面是实例:


public static int office2PDF(String sourceFile, String destFile) {try {File inputFile = new File(sourceFile);
        if (!inputFile.exists()) {return -1;// 找不到源文件, 则返回-1
        }// 如果目标路径不存在, 则新建该路径
        File outputFile = new File(destFile);
        if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().mkdirs();
        }DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        // connect to an OpenOffice.org instance running on port 8100
        OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
        connection.connect();
        //用于测试openOffice连接时间
        log.debug("连接时间:"+df.format(new Date()));
        // convert
        DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
        converter.convert(inputFile, outputFile);
        //测试word转PDF的转换时间
        log.debug("转换时间:"+df.format(new Date()));
        // close the connection
        connection.disconnect();
        return 0;
    }catch (ConnectException e){e.printStackTrace();
        log.error("openOffice连接失败!请检查IP,端口");
    } catch (Exception e) {e.printStackTrace();
    }return 1;
}

代码实现是在文件上传的时候同时转PDF;因为考虑到多个用户同时上传所以写了一个线程调用的这个方法,暂时还没发现什么问题

当然我没有用上面的openOfficeDocumentConverter(Connection);

因为我使用这种会出现could not load input documnet;意思是我的文档加载不了,我查过路径绝对正确

所有改用StreamOpenOfficeDocumentConverter(connection);

结果没有问题;像其他说的什么图片会被过滤掉,我试过不会有这种情况发生,并且转换也很稳定

唯一出现的问题就是连接openOffice的时候用时太长,都在一分钟左右

转换world的时候很快!

百度了一下却没有发现解决的方法,甚至没看见有这种情况,如果知道的请告知一下

Java项目中使用OpenOffice转PDF相关推荐

  1. 关于Java项目中,word和Excel类型文件的预览功能实现

    关于Java项目中,word和Excel类型文件的预览功能实现 背景 Aspose说明 Aspose.Words Aspose.Cells pom依赖引入 引入license.xml(授权文件) 创建 ...

  2. JAVA项目中如何实现图片上传?

    JAVA项目中实现图片上传 **前端div** <div class="layui-form-item"><label class="layui-for ...

  3. Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件

    在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...

  4. 在Java程序中创建和转换PDF文件

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: Codingqi123 来源: jianshu.com/p/db15232987 ...

  5. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  6. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  7. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

  8. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  9. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  10. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

最新文章

  1. 2022-2028年中国硅质原料行业全景调研及投资前景展望报告
  2. 函数小知识点(文档字符串,闭包等)
  3. 【数字信号处理】相关函数 ( 相关系数与相关函数 | 相关函数定义 )
  4. cinder块存储配置使用lvm
  5. android 蓝牙传输分包,彻底掌握Android多分包技术(一)
  6. 今日arXiv精选 | 21篇EMNLP 2021最新论文
  7. [导入]FreeTextBox 1.6.3 中文版使用说明
  8. visualvm远程jvm_VisualVM:通过SSH监视远程JVM(是否为JMX)
  9. BAT Java面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
  10. VMWARE 构建局域网 + VMWARE SQL Server 服务器搭建
  11. python测试代码怎么写_python unittest编写测试代码
  12. Silverlight实用窍门系列:58.Silverlight中的Binding使用(三)-数据集合的绑定
  13. HDU-1671 Phone List
  14. jQuery Deferred对象
  15. Java语言程序设计与数据结构(基础篇)原书第11版
  16. 基于java的小型超市管理系统系统(含源文件)
  17. 什么是敏捷开发?它有什么特点
  18. php codesniffer,为你的 PHP_CodeSniffer 构建自定义规则
  19. Oracle数据库语句大全
  20. IOI2011 Race

热门文章

  1. linux环境 下载Neo4j
  2. 8.声卡驱动02-自己实现alsa驱动-虚拟声卡-匹配
  3. 文本转成图片(自动换行、自定义字体),图片抗锯齿优化,图片压缩优化
  4. 如何使用origin画韦恩图?
  5. 公文签收 php,公文收发管理系统
  6. 计算机英语知识竞赛题库,大学生计算机基础知识竞赛题库_大学生计算机基础知识竞赛试题附答案...
  7. 打造地图拼接利器(一)前言
  8. cesium绘制地图国/省/市/区边界线
  9. TIDSP TMS320F28075 芯片串口烧录软件编写
  10. 如何在浏览器中下载网站的https证书