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

软件的安装与配置

链接: 官网 / CSDN / 毒盘:提取码:k47b
有能力的大佬可以选择csdn下载支持支持,官网下载可能有点慢

Windows下安装配置

下载安装包,安装到硬盘(这个就不截图了吧),记住你的安装路径,安装好后进入安装目录下的program文件夹(有soffice.exe文件的那个),运行以下命令开启服务
./soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"
到这里就安装完成

Linux下安装配置

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

项目配置

添加jar文件

项目使用的是SpringBoot框架,下载jar文件CSDN / 毒盘 (提取码:23wu),解压出来,进入到项目目录下(有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依赖

		<dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>jurt</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>ridl</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>juh</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>unoil</artifactId>
            <version>3.0.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.artofsolving.jodconverter/jodconverter-core -->
        <dependency>
            <groupId>org.artofsolving.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>3.0-beta-4</version>
        </dependency>

代码实现

简单版

/**
     * 文件转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();
        }
    }

附一张转换后页面预览的图吧
在这里插入图片描述
后面完整版的代码是借鉴以下大佬的帖子,写的非常好,蒙古码农
写这篇帖子只为分析交流并记录一下,如果有什么错误的地方还希望各位批评指正,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南念-shmily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值