Aspose.word轉換PDF踩坑總結


1    需求背景

運營台賬功能需要將用戶上傳的doc、docx、wps格式的文檔進行在線預覽。(2月17日用戶提交需求)

運營台賬功能的“一鍵生成”功能需要生成PDF,並自動上傳以及下載至用戶端。(3月2日用戶提交需求)

2    方案研究

2.1   在線預覽

文件可能存在兩個來源,一、前端生成后用戶手動上傳;二、用戶手動創建文件后上傳。

程序生成的文件采用了jquery.wordexport.js實現,將html文本添加MSOffice文件頭后直接存儲為doc。

而用戶自己創建的文件則是由Micro Office或者WPS生成,這兩種文件存在本質性的區別。

因此為了兼容所有情況,需要對不同類型的文件進行統一處理。經過查詢各種資料,找到了kkFileView開源項目。

kkFileView項目為文件文檔在線預覽項目解決方案,對標業內付費產品有【永中office】【office365】【idocv】等。

使用spring boot搭建,易上手和部署,基本支持主流辦公文檔的在線預覽,如doc,docx,Excel,pdf,txt,zip,rar,圖片等等。

然而,開發的過程終究會遇到各種坎坷。使用jquery.wordexport.js生成doc文件,kkFileView無法正確渲染。因此考慮更換前端生成doc文檔插件。

經過測試,生成的doc文件如果在pc端打開后另存為docx格式后再上傳,kkFileView是可以正常渲染的。因此找到了Html-docx.js插件, 它可以將HTML轉換為docx,於是將其集成到開發環境中,就在我們以為一切都已經OK的時候,用戶提交了新的需求:需要將頁面導出為PDF。

2.2   生成PDF

與台賬功能十分相似的還有另外一個功能:月報。月報中也存在一鍵導出、上傳。而月報的頁面布局、樣式相對比較復雜,因此我們需要的還是直接將HTML文本轉換為PDF文檔。經過一番搜索后,找到了以下幾種方案。

序號

描述

備注

測試結果

1

前端繪制canvas,保存為圖片,后端將圖片生成PDF

canvas

1、 生成的圖片不清晰

2、 只能生成當前屏幕的截圖,頁面缺失

2

前端直接轉為PDF

jspdf.js

原理同上,結果同上

3

wkhtmltopdf

服務端命令調用

1、 需要在服務器安裝wkhtmltopdf程序

2、 集成方式:Java調用shell命令將頁面地址傳入wkhtmltopdf工具來生成PDF

3、 pass原因:需要重構頁面;華為雲容器部署難以實現

4

Apache iText

Jar包集成

1、 對HTML的css樣式渲染效果很差,導致生成的PDF樣式錯亂

2、 對HTML標簽要求嚴格,標簽未關閉則會渲染失敗

5

flying-saucer-pdf

 

Jar包集成

1、 基於Apache iText二次開發

2、 支持css樣式渲染

3、 也存在HTML標簽要求嚴格的問題,因台賬功能中包含富文本編輯器,無法保證渲染效果

6

Aspose.word

Jar包集成

企業級收費產品

1、 收費

2、 暫未實現如何設置字體,導致在Linux部署時生成的文檔字體存在小小的問題

7

Spire.doc

Jar包集成

企業級收費產品

1、 收費

2、 只能對通過Office創建的文檔進行轉換,對於使用html-docx.js生成的文檔無法轉換

8

Docx4j

Jar包集成

1、 只能對通過Office創建的文檔進行轉換,對於使用html-docx.js生成的文檔無法轉換

2、 效率極低,50Kb的docx文檔轉換過程需要1分鍾以上

9

MdToPdf

Jar包集成

1、 只支持markDown文件轉換為PDF

2、 無法渲染圖片

3、 無法完美渲染表格

 

經過多方對比,比較符合需求的只有方案6(Aspose.word)

萬幸的是,找到了熱心網友上傳的破解Jar包,無需設置Licence,生成的文檔中也沒有版權水印等信息。

3   集成Aspose.word

目前只存在一個問題,字體設置未生效。

在外網環境中,生成的PDF效果正常。

在內網環境中,文檔中部分文字顯示效果不理想,效果如下。

嘗試解決:

  • 將外網機器中的“C:windows/fonts”中的所有字體拷貝至內網機器中並安裝,問題依舊未能解決。
  • 查詢word官方文檔,在程序中添加了字體掃描路徑,問題依舊未能解決。

 

暫時放棄,直接在Linux環境進行部署測試。

在Linux環境部署后,新的問題出現了。

 

 

猜測這個問題應該是服務器未安裝中文字體導致的,因此將windows端的中文字體上傳至服務器,並安裝,問題解決。

 

4    華為雲部署

雲上環境和252測試系統區別很大,252是jar包部署,華為雲是docker環境部署。

在雲服務器上提前裝好了中文字體,然而在部署后,經過測試,中文字體依舊沒能正常渲染。

猜測原因可能是docker鏡像中不存在中文字體,而華為雲部署時上傳jar包后,打鏡像的過程是華為雲實現的,無法進行介入,無法安裝字體。

與華為雲負責人進行協調,答復是不支持,並且不提供幫助。

在多方同事的協助下,進行了兩個方向的研究,一、程序配置字體掃描及字體設置;二、依賴自帶中文字體的基礎鏡像手動構建docker鏡像。

 


免責聲明!

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



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