摘要:由于公司要求限制,該項目在下開發,非,因此需要傳統方式引入相關依賴包。此外,的啟動與結束需要自己控制。項目啟動時調用結束時關閉轉換服務啟動成功找不到源文件則返回假如目標路徑不存在則新建該路徑轉換服務完成。
簡介
引入jodconverter相關jar,配合libreOffice、openOffice兩款軟件,只需進行簡單編碼可以實現各種文檔轉換。
應用目前已在兩個項目中應用:
F項目需要滾動播放視頻、文檔(Excel/Word...)功能,使用jodconverter將文檔轉成pdf,結合pdfjs實現。由于個人獨立開發,只要結果,故選型自由。后端Spring boot,前端阿里飛冰??梢灾苯邮褂胘odconverter的starter:
org.jodconverter jodconverter-core 4.2.0 org.jodconverter jodconverter-local 4.2.0 org.jodconverter jodconverter-spring-boot-starter 4.2.0
使用也非常方便,注入可用:
import java.io.File; import javax.annotation.Resource; import org.jodconverter.DocumentConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.foton.common.Constants; @Component public class DocumentConverterUtil { private final Logger logger = LoggerFactory.getLogger(this.getClass()); // @Value("${office.home}") // String officeHome; @Resource private DocumentConverter documentConverter; public String convert(File in, File out) { // DocumentFormat pdf = documentConverter.getFormatRegistry().getFormatByExtension("pdf"); try { String fileName=in.getName(); String fileType=fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); // Excel尺寸控制 if(fileType.equals("xls")) ConverterUtil.setXlsFitToWidth(in); long startTime = System.currentTimeMillis(); documentConverter.convert(in).to(out).execute(); long conversionTime = System.currentTimeMillis() - startTime; logger.info(String.format("successful conversion: %s to %s in %dms",in.getName(), "pdf", conversionTime)); } catch (Exception e) { e.printStackTrace(); return Constants.FAIL; } return Constants.SUCCESS; } }
H項目應審查要求,原本開發的導出Excel功能需調整為導出pdf,因此在原來基礎功能上用jodconvert額外增加一次轉換。由于公司要求限制,該項目在jdk1.7下開發,非maven,因此需要傳統jar方式引入相關依賴jar包。值得注意的是,jodconvert在4.1.0不支持jdk7,而4.1.0版本僅會吃libreOffice 5(libreOffice升級到6后目錄變更,作者在4.2.0版本中調整,但該版本不支持jdk7)。此外,convert的啟動與結束需要自己控制。
import com.eos.runtime.core.IRuntimeListener; import com.eos.runtime.core.RuntimeEvent; public class JodConverterStartupListener implements IRuntimeListener { @Override public void start(RuntimeEvent arg0) { DocumentConverterUtil.start(); // 項目啟動時調用 } @Override public void stop(RuntimeEvent arg0) { DocumentConverterUtil.stop(); // 結束時關閉 } }
import java.io.File; import org.jodconverter.DocumentConverter; import org.jodconverter.LocalConverter; import org.jodconverter.office.LocalOfficeManager; import org.jodconverter.office.OfficeException; import org.jodconverter.office.OfficeManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DocumentConverterUtil { private static final Logger logger = LoggerFactory.getLogger(DocumentConverterUtil.class); public static DocumentConverter documentConverter; public static OfficeManager officeManager; public static void start() { officeManager = LocalOfficeManager.builder().build(); documentConverter = LocalConverter.make(officeManager); try { officeManager.start(); logger.info(">>> office轉換服務啟動成功!"); } catch (OfficeException e) { e.printStackTrace(); } } public static void converter(String inputFilePath, String outputFilePath) throws Exception { File inputFile = new File(inputFilePath); if (inputFile.exists()) {// 找不到源文件, 則返回 File outputFile = new File(outputFilePath); if (!outputFile.getParentFile().exists()) { // 假如目標路徑不存在, 則新建該路徑 outputFile.getParentFile().mkdirs(); } String fileType = inputFilePath.substring(inputFilePath.lastIndexOf(".")+1,inputFilePath.length()); if(fileType.equals("xls")) ConverterUtil.setXlsFitToWidth(inputFile); documentConverter.convert(inputFile) .to(outputFile) .execute(); } } public static void stop() { if (officeManager.isRunning()) { try { officeManager.stop(); } catch (OfficeException e) { e.printStackTrace(); } logger.info(">>> office轉換服務完成。"); } } }關于我
rebey.cn
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77898.html
摘要:用將文檔轉換本例使用。在和環境下測試通過。轉換命令源文件放在或者封裝了一組轉換命令,通過調用相關服務。安裝檢查已有字體庫復制字體新建文件夾把系統的字體復制進去。 用LibreOffice將Office文檔轉換PDF 本例使用 LibreOffice-6.0.4、jodconverter-4.2.0、spring-boot-1.5.9.RELEASE。 在CentOS7 + ope...
摘要:在下一切運行正常,但是到下文件的文件名和生成路徑就會發生變化,這里的不會被當作路徑分隔符了,而是當作文件名的一部分,其實修改起來也很簡單創建另一個線程啟動服務,老是會出現無法連接服務的異常。 php預覽word文檔的實現 以及實現過程中遇到的各種坑 在做軟件工程的課程設計的時候,我們小組選擇做一個資料分享網站,網站最重要的功能當然就是上傳文件和下載文件。但是這中間就需要一個比較重要的過...
摘要:在下一切運行正常,但是到下文件的文件名和生成路徑就會發生變化,這里的不會被當作路徑分隔符了,而是當作文件名的一部分,其實修改起來也很簡單創建另一個線程啟動服務,老是會出現無法連接服務的異常。 php預覽word文檔的實現 以及實現過程中遇到的各種坑 在做軟件工程的課程設計的時候,我們小組選擇做一個資料分享網站,網站最重要的功能當然就是上傳文件和下載文件。但是這中間就需要一個比較重要的過...
閱讀 3241·2021-10-27 14:20
閱讀 2524·2021-10-08 10:05
閱讀 1624·2021-09-09 09:33
閱讀 2901·2019-08-30 13:16
閱讀 1434·2019-08-29 18:34
閱讀 1168·2019-08-29 10:58
閱讀 1227·2019-08-28 18:22
閱讀 1225·2019-08-26 13:33