Office2Pdf工具开发

Office2Pdf工具开发

@(工程开发)

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

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 8100
            OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
            connection.connect();

            // convert
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(new File(sourceFile), new File(destFile));

            // close the connection
            connection.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路径下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值