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依赖#

复制代码
        <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();
        }
    }
复制代码

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

 

作者:TanXJ

出处:https://www.cnblogs.com/tanxj/p/13298626.html

posted @   路遥_13  阅读(1215)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示