美文网首页
java通过openOffice实现word,excel,ppt

java通过openOffice实现word,excel,ppt

作者: haiyong6 | 来源:发表于2019-06-28 18:02 被阅读0次

    思路:浏览器无法直接打开word,excel,ppt等文件,思路是通过openOffice先把文件转成pdf保存在服务器上,再通过浏览器直接打开pdf从而实现预览功能。

    OpenOffice

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

    下载地址

    http://www.openoffice.org/

    JodConverter

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

    下载openOffce软件,安装相应系统版本,这里以windows为例

    所需jar包:


    image.png

    或者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包可能有些资源库没有,可以先去maven官网下载下来之后安装到本地maven库就行了。
    新建实体类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()) {
                    // 找不到源文件, 则返回false
                    return 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

    D:\profiles\openOfice4\program>soffice -headless -accept="socket,host=127.0.0.1,
    port=8100;urp;"-nofirststartwizard
    
    image.png
    image.png

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

    public static boolean officeToPDF(String sourceFilePath, String destFilePath) {
    
            boolean flag = false;
            //try {
                File inputFile = new File(sourceFilePath);
                if (!inputFile.exists()) {
                    // 找不到源文件, 则返回false
                    return 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;
        }
    

    相关文章

      网友评论

          本文标题:java通过openOffice实现word,excel,ppt

          本文链接:https://www.haomeiwen.com/subject/dfbecctx.html