軟件的安裝與配置
鏈接: 官網 / 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(); } }
附一張轉換后頁面預覽的圖吧