java 使用openoffice将doc、docx、ppt、pptx等转换pdf格式文件


软件的安装与配置

链接: 官网 / C**N / 毒盘:提取码k47b

有能力的大佬可以选择c**n下载支持支持,官网下载可能有点慢

Windows下安装配置

下载安装包,安装到硬盘(这个就不截图了吧),记住你的安装路径,安装好后进入安装目录下的program文件夹(有soffice.exe文件的那个),运行以下命令开启服务

./soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"

到这里就安装完成

Linux下安装配置

emmm…暂时没时间,所以没有测试等回头测试一次了再来发

项目配置

项目使用的是SpringBoot框架,下载jar文件C**N / 毒盘(提取码:23wu) (emmm…上传了再来加链接),解压出来,进入到项目目录下(有pom文件的目录),打开cmd窗口,依次运行

mvn install:install-file -Dfile=D:\jar文件目录,记得修改成自己的\jodconverter-core-3.0-beta-4.jar -DgroupId='org.artofsolving.jodconverter' -DartifactId=jodconverter-core -Dversion='3.0-beta-4' -Dpackaging=jar
mvn install:install-file -Dfile=D:\jar文件目录\jodconverter-2.2.2.jar -DgroupId='com.artofsolving' -DartifactId=jodconverter -Dversion='2.2.2' -Dpackaging=jar

引入pom依赖

        
            com.artofsolving
            jodconverter
            2.2.2
        
        
            org.openoffice
            jurt
            3.0.1
        
        
            org.openoffice
            ridl
            3.0.1
        
        
            org.openoffice
            juh
            3.0.1
        
        
            org.openoffice
            unoil
            3.0.1
        
        
        
            org.artofsolving.jodconverter
            jodconverter-core
            3.0-beta-4
        

代码实现

简单版

/**
     * 文件转pdf
     * @param inputFile    源文件
     * @param OpenOfficeHost    host地址 (127.0.0.1)
     * @param OpenOfficePort    port端口
     * @return
     */
    public static String file2PDF(File inputFile, String  OpenOfficeHost , Integer OpenOfficePort) {
        String outPath="";
        try {
            if (!inputFile.exists()) {
                return outPath;
            }
            // 如果目标路径不存在, 则新建该路径
            outPath=inputFile.toString().substring(0, inputFile.toString().indexOf("."))+".pdf";
            File outputFile = new File(outPath);
            if (!outputFile.getParentFile().exists()) {
                outputFile.getParentFile().mkdirs();
            }
            //如果目标文件存在,则删除
            if (outputFile.exists()) {
                outputFile.delete();
            }
            OpenOfficeConnection connection = new SocketOpenOfficeConnection(OpenOfficeHost, OpenOfficePort);
            connection.connect();
            DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
            converter.convert(inputFile, outputFile);
            connection.disconnect();
            return outPath;
        }  catch (Exception e) {
            e.printStackTrace();
        }
        return outPath;
    }

完整版

private static OfficeManager officeManager;

private static boolean reconnect(Integer OpenOfficePort){
        try {
            ExternalOfficeManagerConfiguration externalProcessOfficeManager = new ExternalOfficeManagerConfiguration();
            externalProcessOfficeManager.setConnectOnStart(true);
            externalProcessOfficeManager.setPortNumber(OpenOfficePort);
            officeManager = externalProcessOfficeManager.buildOfficeManager();
            officeManager.start();
            return true;
        } catch (OfficeException e) {
            e.printStackTrace();
            return false;
        }
    }
    // 开启新的openoffice的进程
    private static void start(Integer OpenOfficePort,String OpenOfficeHome) {
        try {
            DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
            configuration.setPortNumbers(OpenOfficePort);// 端口号
            configuration.setOfficeHome(OpenOfficeHome);//安装位置
            configuration.setTaskExecutionTimeout(1000 * 60 * 5);// 设置任务执行超时为5分钟
            configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24);// 设置任务队列超时为24小时
            officeManager = configuration.buildOfficeManager();
            officeManager.start(); // 启动服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 文件转pdf
     * @param input 输入文件
     * @param OpenOfficePort  端口号
     * @param OpenOfficeHome  安装地址
     * @return
     */
    public static File convertToPdf(String input,Integer OpenOfficePort,String OpenOfficeHome) {
        File inputFile = null;
        File outFile = null;
        try {
            // 如果已存在的服务不能连接或者不存在服务,那么开启新的服务    
            if(!reconnect(OpenOfficePort)){
                start(OpenOfficePort , OpenOfficeHome);
            }
            String output = FilenameUtils.separatorsToSystem(FilenameUtils.getFullPath(input) + FilenameUtils.getBaseName(input) + ".pdf");
            inputFile = new File(input);
            outFile = new File(output);
            OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
            converter.convert(inputFile,outFile); // 转换文档
        } catch (OfficeException o){
            System.out.println("无法连接到外部办公流程!");
        } catch (Exception e) {
            outFile = null;
        }finally{
            stop();
        }
        return outFile;
    }
    // 关闭该进程
    private static void stop() {
        try {
            if (officeManager != null)
            officeManager.stop();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

附一张转换后页面预览的图吧