天天看點

Java如何把文檔轉換成PDF

分享知識 傳遞快樂

1、先在網上下載下傳OpenOffice,并安裝。

2、引入以下jar:

  • commons-cli-1.1.jar
  • commons-io-1.4.jar
  • jodconverter-core-3.0-beta-4.jar
  • juh-3.2.1.jar
  • jurt-3.2.1.jar
  • ridl-3.2.1.jar
  • unoil-3.2.1.jar

如果有新的jar,也可以引入新的jar。

代碼如下:

package com.singleton;

import java.io.File;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

import com.xh.Constant;

/**
 * 
 * @author H.Yang
 * @date 2017年9月8日
 */
public class SingleOpenOffice {

  private static SingleOpenOffice start = new SingleOpenOffice();
  private static OfficeManager officeManager;

  // 擷取唯一可用的對象
  public static SingleOpenOffice getStart() {
    DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
    System.out.println("準備啟動服務....");
    configuration.setOfficeHome(FileSuffixType.FILEPATH.getName()); // 設定OpenOffice.org安裝目錄
    configuration.setPortNumber((int) FileSuffixType.PORT.getValue()); // 設定轉換端口,預設為8100
    configuration.setTaskExecutionTimeout(Long.valueOf(String.valueOf(FileSuffixType.EXECUTE_OVERTIME.getValue())));
    configuration.setTaskQueueTimeout(Long.valueOf(String.valueOf(FileSuffixType.QUEUE_OVERTIME.getValue())));

    officeManager = configuration.buildOfficeManager();
    officeManager.start(); // 啟動服務
    System.out.println("office服務啟動成功!");
    return start;
  }

  /**
   * 文檔轉換
   * <hr>
   * 将doc,docx,xls,xlsx,ppt,pptx,txt等文檔轉換成PDF文檔,如果不指定輸出位址預設目前檔案位址
   * 
   * @author H.Yang
   * @date 2016年12月13日
   * @explain
   * 
   * @param inputFilePath
   *            - 轉換檔案位址(必須)
   * @param outputFilePath
   *            - 輸出位址(可空)
   * @param newFileName
   *            - 新檔案名(可空)
   * @return
   */
  public String execute2Pdf(String inputFilePath, String outputFilePath, String newFileName) {
    File inputFile = new File(inputFilePath);
    String fileName = inputFile.getName();
    String prefix = fileName.substring(fileName.lastIndexOf(".") + 0);
    String outputPath = null;

    boolean isTrue = false;
    if (!inputFile.exists()) {
      System.out.println("檔案不存在!");
      return null;
    }

    for (String name : Constant.FILE_SUFFIX) {
      if (fileName.endsWith(name)) {
        isTrue = true;
        break;
      }
    }

    if (!isTrue) {
      System.out.println("檔案格式錯誤");
      return null;
    }

    if (outputFilePath != null) {
      outputPath = newFileName == null ? outputFilePath + fileName.replace(prefix, Constant.PDF_SUFFIX) : outputFilePath
          + fileName.replace(fileName, newFileName) + Constant.PDF_SUFFIX;
    } else {
      outputPath = newFileName == null ? inputFile.getPath().replace(prefix, Constant.PDF_SUFFIX) : inputFile.getPath().replace(fileName, newFileName)
          + Constant.PDF_SUFFIX;
    }

    File outputFile = new File(outputPath);
    if (!outputFile.exists()) {
      // 執行方法服務功能
      execute(inputFile, outputFile);
    } else {
      System.out.println("檔案已存在");
    }
    return outputPath;
  }

  /**
   * 執行方法服務功能
   * 
   * @author H.Yang
   * @date 2016年12月13日
   * @explain
   * 
   * @param inputFile
   * @param outputFile
   */
  private static void execute(File inputFile, File outputFile) {
    long startTime = System.currentTimeMillis();// 擷取開始時間

    try {
      System.out.println("進行文檔轉換轉換:" + inputFile + " --> " + outputFile);
      OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
      converter.convert(inputFile, outputFile);
      System.out.println("Office轉換成功");
    } catch (Exception e) {
      getStop();
      e.printStackTrace();
    }

    long endTime = System.currentTimeMillis(); // 擷取結束時間
    System.out.println("程式運作時間: " + (endTime - startTime) / 1000 + "s");
  }

  public static void getStop() {
    if (officeManager != null) {
      officeManager.stop();
    }
    System.out.println("office關閉成功!");
  }

}      

源碼下載下傳:​​點選打開連結​​

繼續閱讀