package com.inkasso.factoring.common.util.onlineConverter;

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;
import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;

import java.io.File;

public class OfficeConverterUtil {

    /**
     * 将Office文档转换为PDF. 运行该函数需要用到OpenOffice, OpenOffice下载地址为 http://www.openoffice.org/
     * 
     * <pre>
     * 
     * 项目执行需要启动OpenOffice服务，在系统命令窗口执行命令。
        cd C:\Program Files (x86)\OpenOffice.org 4\program
        soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
        如果是行不通，在soffice前加./soffice
     *  
     * 方法示例: 
     * String sourcePath = "F:\\office\\source.doc"; 
     * String destFile = "F:\\pdf\\dest.pdf"; 
     * Converter.office2PDF(sourcePath, destFile);
     * </pre>
     * 
     * @param sourceFile 源文件, 绝对路径. 可以是Office2003-2007全部格式的文档, Office2010的没测试. 包括.doc, .docx, .xls, .xlsx, .ppt, .pptx等.
     * 示例: F:\\office\\source.doc
     * @param destFile 目标文件. 绝对路径. 示例: F:\\pdf\\dest.pdf
     * @return 操作成功与否的提示信息. 如果返回 -1, 表示找不到源文件, 或url.properties配置错误; 如果返回 0, 则表示操作成功; 返回1, 则表示转换失败
     */
    public static File office2Pdf(String sourceFile, String destFile) {
        File outputFile = null;
        try {
            File inputFile = new File(sourceFile);
            if (!inputFile.exists()) {
                // return -1;// 找不到源文件, 则返回-1
            }
            // 如果目标路径不存在, 则新建该路径
            outputFile = new File(destFile);
            if (!outputFile.getParentFile().exists()) {
                outputFile.getParentFile().mkdirs();
            }
            // 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(inputFile, outputFile);
            // close the connection
            connection.disconnect();
        } catch (java.net.ConnectException e) {
            e.printStackTrace();
        }
        return outputFile;
    }
}
