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
分类:
Java
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?