office轉PDF文檔

最近項目上面有個需求,將用戶上傳的office格式轉換成pdf格式。下面記錄下我走過的一些彎路,和獲得的一些收穫 
     1 使用java第三方api轉換。 
     這個是我最開始的想法,由於java畢竟比較熟悉,學習成本,維護成本相對較低。這個方案找過不少第三方,例如poi之類的,可是有兩個缺點,1 性能低,對cpu壓力大,2 兼容性差,不少格式或者特殊字符解析不出。 
     2 使用openOffice 
     openOffice也算是大名鼎鼎了,我使用的是另外一個分支libreoffice。這個方案是在linux服務器上安裝openOffice而後經過openOffice命令來轉換pdf。 
     性能問題基本解決,可是兼容性仍是太差,特別是windowsOffice不少特有 格式沒法讀取或者亂碼,並且須要安裝微軟中文字體還有可能涉及到侵權。 
     3使用微軟提供的com組件實現 
     微軟提供一個叫作SaveAsPDFandXPS的com組建來實現office轉換成pdf。 
     java經過jacob來調用com組件 
     具體實現 
     1 若是是web工程的話在jdk的bin目錄下放置jacob-1.14.3-x64.dll 
     2 須要一臺windows服務器,將該功能單獨部署 
     3 這臺windows服務須要安裝office 和SaveAsPDFandXPS 
     方案優勢, 解決性能問題,完美解決兼容性問題。 
     方案缺點, 需將轉換服務單獨部署,成爲獨立服務。須要windows服務器。須要實現linux系統和windows系統共享文件。這裏感謝運維人員提供支持,經過磁盤掛載的方式實現共享文件。 
     
 
     實現流程爲: 
    用戶上傳文件到web,web項目將用戶上傳的文件保存到文檔服務器,而後調用部署在windows上的遠程服務同時傳遞文件路徑,該遠程服務根據路徑查找文檔服務器上的文件並轉換,然會返回相應的結果。 
    稍微注意就是,看業務需求是同步轉換仍是異步轉換,同步採用rpc機制調用遠程服務,異步採用mq消息隊列機制來實現遠程服務調用。mq好處在於,能夠最大化提高性能,由於能夠經過隊列來按順序轉換對應文件。java

相關文章
相關標籤/搜索