⑴ java調用freemarker模板文件在伺服器生成pdf或word文
在線預覽文檔功能實現概述
在前年的項目中,需要一個在線預覽功能,即用戶上傳的Word或Excel等文檔可以不經過下載直接在線預覽。項目部署在Linux上,對比了多種解決方案後,決定將所有文檔統一轉化為PDF,使用H5技術的PDF在線預覽模塊來實現在線預覽。此過程涉及兩個關鍵問題:文檔轉換為PDF和在線預覽PDF。
首先,需解決用戶上傳文檔轉化為PDF的問題。考慮到項目部署環境,排除了基於MS Office的方案,最終選定使用LibreOffice的SDK完成轉換。為解決Java與LibreOffice交互的問題,採用開源的JODConverter插件。測試結果顯示轉換效果滿意,速度理想,但該插件不支持多線程。
其次,實現在線預覽PDF的方案。考慮到Flash的復雜性和高昂成本,選擇了使用火狐自家的PDF.js,純H5實現,無需任何插件,滿足在線預覽需求。但其不支持IE8以下瀏覽器,存在一定的兼容性限制。
以上方案解決了文檔預覽問題,對於數據填寫後生成固定格式的文檔需求,可參考此解決方案。FreeMarker作為視圖層的一部分,與文檔生成屬於不同層次,與生成文檔並無直接關聯。
針對生成固定格式文檔的需求,推薦使用Java中強大的Apache POI庫。POI庫對於讀取文檔功能表現良好,但對於寫入功能,尤其是對樣式操作的直觀性有所欠缺。盡管如此,對於所謂的「固定格式表格」生成,POI庫應能滿足需求。
綜上所述,解決文檔預覽和生成固定格式文檔的問題,推薦方案為:POI(生成文檔)-> LibreOffice + JODConverter(轉換文檔至PDF)。如果需要在線預覽文檔,則使用PDF.js。此方案在滿足用戶需求的同時,兼顧了功能實現的高效性和兼容性。