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();
        }
    }

附一張轉換后頁面預覽的圖吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM