當前位置:
首頁 > 最新 > 文件預覽——一路躺過來的那些坑

文件預覽——一路躺過來的那些坑

男孩

 歌手 第10期

梁博 

00:00/05:11

因為最近項目比較緊,所以dubbo源碼系列是顧不上了。

恰巧這周花了幾天在做文件預覽這塊,兩三天的時間下來,有過一些走彎路的經驗教訓(準確說,全都是彎路),在這裡給大家分享下~


背景

基於產品需求,需要支持文件預覽的功能。顧名思義,要支持類似word、excel、TXT、PDF等格式文件的在線預覽。

業界對於文件預覽功能的實現也是各顯神通。大體主要分為兩種,一種是自主研發,另外就是購買成熟預覽服務提供商的服務。

既然說到躺坑,那自然是屬於第一種自主研發的情況。

自主研發主要還是借用現有的軟體和類庫組合,加上編碼實現。網上搜羅一通,資料相對老舊,很多組件也有超過5年沒有更新迭代了。解決方案大致分為兩種:

1、以Openoffice + swftools + Flexmapper + jodconverter技術組合的預覽實現

大體思路是將如doc等文件格式轉為pdf格式,再將pdf經過swftools工具轉為swf格式,有flexmapper負責最後的預覽。

上面這四個組件,沒有一個是好惹的,各個脾氣古怪,稍不順心,就給你報個錯,讓你折騰半天。

2、以https://github.com/kekingcn/kkFileView(下面簡稱kkFileView)該項目為首的基於jodconverter-core + Openoffice的解決方案

大體思路是藉助jodconverter-core和Openoffice將doc等文件轉為pdf格式,再由前端通過第三方預覽組件如pdf.js負責預覽展示。


既然市面上提供多種可行性的方案,那麼就需要調研對比具體的效果。

kkFileView

首先調用的是kkFileView,相信只要找文檔格式轉換和預覽相關的,最終都會看到這個項目。

該項目託管在GitHub上,使用spring boot打造文件文檔在線預覽項目解決方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4,mp3以及眾多類文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在線預覽。

看上去完美,但是對接也並非一帆風順。一些具體細節問題可以到QQ群諮詢,在Github上有提供加入方式。

環境配置

該項目的思路是將如doc、xls等格式轉為pdf格式供前端展示。但是應該是考慮到文件轉換耗時較長的問題,所以使用了Redis做緩存,如果發現緩存中已經有轉換過的記錄就不再執行耗時的轉換操作。所以需要配置Redis環境。

該項目同樣依賴Openoffice服務,所以要安裝Openoffice軟體。安裝完成需要在項目的配置文件中配置安裝軟體路徑。

最後kkFileView項目application-dev.properties配置如下

文件轉換

本地搭建環境後,啟動服務,測試各種常見文檔如word、excel、ppt等,發現仍然存在一些問題。

當上傳word或其他文檔過大時,預覽翻頁的時候會有明顯的陰影和卡頓的情況,而且翻頁速度變快時,會出現反覆載入的情況。

對於ppt文檔的支持較差,尤其包含動畫的ppt頁,只是簡單的疊加,導致內容失真。同時可能是電腦本地字體庫的原因,有些文件在轉換後預覽的時候會出現亂碼的情況。

Openoffice + swftools + Flexmapper + jodconverter方案

為了運行起該方案,走了太多彎路。

後來只能在虛擬機的Windows環境中安裝swftools,安裝過程中也會彈出一個錯誤,只需要以管理員的身份重新安裝即可。

最終在Windows環境下成功實現從doc->pdf->swf的轉換。

如需代碼,請留下郵箱~~~

文件轉換

該模式與上面方案存在同樣的問題,如果需要支持高版本office文檔的轉換,也需要jodconverter-core的支持。

而且,該方案,文件轉換繁瑣,需要轉為pdf,再由pdf轉為swf,最後進行預覽。swf已經是極為過時的技術。


因為本地的setting.xml文件沒有添加這個repository,所以在當前項目的pom.xml文件中添加

我本地有一個測試的完整項目代碼,如果需要,下方留下你的郵箱。

實測效果

將一個近10M的xls文件轉為pdf文檔,本地耗時約為5分鐘左右(不能忍)。

總體,該項目考慮較為完整,但是仍然有不少細節需要優化和處理。

Openoffice + swftools + Flexmapper + jodconverter方案

從實際轉換後得到的swf文件可以看出,對於doc和xls的預覽效果要比上面的好,不會出現卡頓的情況,但是對於ppt格式的支持仍然不理想,只是簡單的疊加覆蓋。

整體對比下來,這兩種方案都存在問題

都依賴相對較多的第三方庫和軟體Openoffice、swftools等

庫和jar的版本沒有持續維護,jodconverter的版本最新的是2008年,jodconverter-core最新版本是2012年。swftools最新版本是2012年。

效率較低,從上面測試效果發現,在文檔轉換過程中佔用資源較多,時間比較長,不能很好的滿足用戶的需求,只能通過一些補償機製做補充,如添加緩存或落盤轉換後的文件

經過調研,協調運維和全後端開發人員,決定採用市面上較為成熟的預覽服務提供商,這裡就不說名稱了,以免有打廣告之嫌。

通過對接後發現,只需要完成註冊+配置域名+拼裝http請求即可,同時預覽同等大小的文件僅需5秒左右。

畢竟,人民幣玩家就是強!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 JackieZheng 的精彩文章:

TAG:JackieZheng |