Office2Pdf工具开发

@(工程开发)

近期,由于公司内部有个组件需要完成word转pdf的功能,在网上做了基本的了解和测试,发现OpenOffice+JobConverter是比较稳定有效的方案。记录如下

  • Office2Pdf工具开发

    • OpenOffice简介

      • 安装
      • 启动
    • JobConverter简介
    • 测试
      • OpenOffice启动和关闭

        • windows
        • linux
    • Java代码
    • ew使用jacob开发

OpenOffice简介

OpenOffice是Apache的开源软件,对标产品是Microsoft的Office365。…

OpenOffice4已经与Office2007版本的格式对标,即已经支持docx、 xlsx等文件格式。故这里我们采用新版本OpenOffice4——发现jodconvert不能支持。
OpenOffice下载地址为https://www.openoffice.org/download/index.html

安装

下载RPM安装包,上传到服务器,然后使用tar解压
tar -zxvf Apache_OpenOffice_4.1.2_Linux_x86-64_install-rpm_zh-CN.tar.gz
进入zh-CN路径,然后执行
yum localinstall RPMS/*.rpm
OK,默认路径是/opt/openoffice4/program

启动

安装完成直接启动Openoffice服务:
临时启动
/opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
一直后台启动
nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

JobConverter简介

测试

OpenOffice启动和关闭

windows

启动,进入安装路径{openOffice}/program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
关闭
taskkill /im soffice.exe /f

linux

  • 启动

  • 关闭

  • 进程监控脚本

  • 设置为开机启动

Java代码

package word2pdf;import java.io.File;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;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.OpenOfficeDocumentConverter;public class Office2PdfUtil {private static final Logger logger = LoggerFactory.getLogger(Office2PdfUtil.class);/*** 已经事先启动的前提下* @param input* @param output*/public static void convert(String input, String output) {File inputFile = new File(input);File outputFile = new File(output);OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);try {logger.info("connect to OpenOffice ...");connection.connect();logger.info("start converting ...");DocumentConverter converter = new OpenOfficeDocumentConverter(connection);converter.convert(inputFile, outputFile);logger.info("finish converting ...");} catch (Exception e) {e.printStackTrace();} finally {try {if (connection != null) {connection.disconnect();logger.info("close down connection ...");connection = null;}} catch (Exception e) {}}} public static int office2PDF(String sourceFile, String destFile) {String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice.org 3\\";// 这里是OpenOffice的安装目录// 假如从文件中读取的URL地址最后一个字符不是 '\',则添加'\'if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {OpenOffice_HOME += "\\";}Process pro = null;try {// 启动OpenOffice的服务String command = OpenOffice_HOME+ "program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";pro = Runtime.getRuntime().exec(command);// connect to an OpenOffice.org instance running on port 8100OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);connection.connect();// convertDocumentConverter converter = new OpenOfficeDocumentConverter(connection);converter.convert(new File(sourceFile), new File(destFile));// close the connectionconnection.disconnect();// 封闭OpenOffice服务的进程pro.destroy();return 0;} catch (Exception e) {e.printStackTrace();return -1;} finally {pro.destroy();try {String closeSofficeCmd="taskkill /f /im soffice.exe";Process process = Runtime.getRuntime().exec(closeSofficeCmd);logger.info("openoffice正常关闭.......");} catch (Exception e2) {logger.error("soffice关闭失败... {}", e2);}}}/*** 测试main方法* * @param args*/public static void main(String[] args) {String input = "C:\\Users\\jason\\Desktop\\爬虫监控产品需求说明书模板_v1.0(修改6).doc";String output = "C:\\Users\\jason\\Desktop\\爬虫监控产品需求说明书模板_v1.0(修改6).pdf";//Office2PdfUtil.convert(input, output);Office2PdfUtil.office2PDF(input, output);}
}

[ew]使用jacob开发

http://wang-ping001.iteye.com/blog/1452057
该方式在Windows操作系统下有非常优秀的转换效率和低样式扰动。但是,暂时没有看到支持Linux操作系统。使用时,记得将jacob.dll文件放置在jdk\bin路径下

Office2Pdf工具开发相关推荐

  1. 系统设计与架构笔记:ETL工具开发和设计的建议

    好久没写博客了,不是自己偷懒,的确是没有时间哦. 最近项目组里想做一个ETL数据抽取工具,这是一个研发项目,但是感觉公司并不是特别重视,不重视不是代表它不重要,而是可能不会对这个项目要求太高,能满足我 ...

  2. [原创]Android Monkey 在线日志分析工具开发

    [原创]Android Monkey 在线日志分析工具开发 在移动App测试过程中,Monkey测试是我们发现潜在问题的一种非常有效手段,但是Android原生的Monkey有其天然的不足,数据不能有 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

  5. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

最新文章

  1. 自然语言处理的蓬勃发展及其未来
  2. eclipse做java_在Eclipse中使用Java 12
  3. 牛客练习赛19 E和F(签到就走系列)托米的饮料+托米搭积木
  4. Drools 5.1.1(一)
  5. when is One Order gt_plan_exets filled
  6. linux指令能回滚么,如何在Ubuntu上撤消或回滚“ apt-get upgrade”命令?
  7. asp微信会员卡管理系统,超小的源码_带asp微信支付源码
  8. 微服务技术栈:流量整形算法,服务熔断与降级
  9. UE4 虚幻引擎, 蓝图节点应用笔记(一)
  10. 按键精灵手机助手之实战篇(三)通用方法
  11. Android MVP架构简析
  12. 更换win10计算机账户,win10更换账户的方法是什么_win10换账号登录的方法
  13. php展厅控制系统,展厅展馆设计智能中控系统
  14. Windows10息屏快的问题解决办法(在更改屏幕和睡眠时间无效的情况下)
  15. 程序员首先要能坐得住
  16. 定时任务:springboot集成Quartz实现多任务多触发的动态管理
  17. 多地“摇号购房” 开发商迎来了良机?
  18. 华中科技大学赛尔宽带登录六维空间
  19. DDD话语评价之二:“值对象”是DDD的创新吗(上)
  20. vscode 提示 vetur can‘t find `tsconfig.json`的解决办法

热门文章

  1. 软件著作权申请有什么条件?
  2. 带你轻松写出第一篇优秀论文
  3. 一个完整的直播App功能分析
  4. 《程序员升职记》第九年 零保护行动
  5. PEPC丨磷酸烯醇丙酮酸羧化酶应用实例展示
  6. python去掉最后一行的换行符_python去掉行尾的换行符方法
  7. angular中组件changeDetection为ChangeDetectionStrategy.OnPush时的学习
  8. 部门新来的00后真是卷王,工作没1年,入职20K
  9. 部门来了个跳槽出来的测试开发,听说是00后,上来一顿操作给我看呆了...
  10. 分享基于JavaEE移动平台的企业级房地产ERP采购系统全程开发实录