前段時間,項目中有個需求是實現(xiàn)文檔預覽的功能,Android要實現(xiàn)該功能要比IOS復雜的多凭戴,下面就我調研的情況,總結一下炕矮,供大家參考:
一么夫、WebView 網頁顯示
該方式類似于ios的實現(xiàn)方式,使用 WebView 加載網絡文件的 Url 地址即可顯示肤视。
1档痪、Google Doc
類似 iOS ,Google 也提供了一種在線文檔解析的功能钢颂,只需要按照固定的格式將遠程文檔的 Url 地址傳給 Google 服務器钞它,即可利用 WebView 控件加載新的 Url 地址拜银,顯示即可殊鞭。
但該方法在國內由于無法使用谷歌服務,所以在國內無法使用
2尼桶、Office Web 365
第三方公司提供的一種 Office 文檔在線預覽的功能操灿,能夠實現(xiàn) Microsoft、Adobe泵督、WPS 文檔的移動端和PC端在線網頁訪問趾盐,其實現(xiàn)方式類似Google Doc配置完文檔URL連接就可以了。
3小腊、永中DCS文檔在線預覽
類似「Office Web 365」提供的服務救鲤,都是通過先在個人管理中心添加遠程文檔域名,結合文檔地址秩冈,組合成一個新的 Url 訪問地址本缠,然后便可以在 PC 和 手機端實現(xiàn)在線預覽。
總結:這兩種方式完全依賴于第三方云服務,提供的免費版入问,預覽量有限丹锹,若預覽量大的時候,就需要付費了芬失,好處是提供一個url地址,可以同時實現(xiàn)手機端和PC端在線預覽文檔的需求,而且集成也比較簡單楣黍。
二、打開本地應用
如果移動設備中安裝有能夠打開 Office 文檔的本地應用棱烂,則可以借助這些應用打開所要操作的文檔租漂,但必須先將遠程文檔下載到設備的本地存儲空間中。
intent打開文件代碼:
Intent intent = new Intent(ACTION_VIEW);
intent.addCategory(CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri uri=getUriForFile(file);
String mimeType=getMimeType(uri);
intent.setDataAndType(uri, mimeType);
startActivity(Intent.createChooser(intent, "打開"));
三、第三方SDK
1窜锯、pdf開源庫:
- AndroidPdfViewer张肾、PdfiumAndroid:基于 pdfium 的兩個 Android 平臺實現(xiàn)方式,支持 PDF 文檔的應用內預覽锚扎,支持動畫吞瞪、縮放、手勢和雙擊操作驾孔。只支持pdf文檔的預覽芍秆,并且需要先下載到本地。
- MuPDF:一個輕量級的 開源 PDF翠勉,也是只支持pdf格式的文檔妖啥,需要文件先下載到本地。
- Foxit PDF SDK:它是福昕出品的对碌、收費的sdk荆虱,支持 PDF 的顯示、導航朽们、創(chuàng)建怀读、搜索、注釋骑脱、保護菜枷、PDF文本提取、圖片轉換叁丧、表單數(shù)據(jù)收集和編輯等功能
由于這些支持的文檔格式都是只支持pdf啤誊,所以其實現(xiàn)時需要后臺統(tǒng)一轉換為pdf的文檔格式,然后安卓端只預覽這一種格式文檔拥娄。例如:
后臺可利用openoffice + jodconverter將office文檔轉換為pdf格式蚊锹。這種方式
需要在服務器上安裝openoffice,文檔頁數(shù)多的話轉換速度很慢(頁數(shù)少的話速度在可以接受的范圍之內稚瘾,轉換速度與文檔大小關系不大牡昆,主要是文檔頁數(shù))。然后Android端可用如AndroidPdfViewe第三方開源sdk預覽這些文檔孟抗,預覽的時候需要先下載到本地迁杨。
2、利用相關技術一端完成文檔轉換
- 服務端轉換文檔:在服務端把office文檔轉化為html凄硼,pdf轉化為圖片铅协,Android端直接用webview加載網址就可以,該種主要看服務端這種好實現(xiàn)不摊沉。
- 在安卓端完成文檔轉換:使用Poi將doc狐史、docx、xls、xlsx文檔轉換為html骏全,再使用webview加載本地html苍柏。使用Apache的Poi組件,但是由于ppt在轉換過程中需要用到java的awt姜贡,所以無法實現(xiàn)ppt的轉換试吁,也就是說只能實現(xiàn)word、excle的轉換楼咳。
3熄捍、使用騰訊瀏覽服務(TBS)
依托 X5 內核強大的能力,可以實現(xiàn)應用內的文件瀏覽功能母怜、視頻播放功能等余耽。直接集成官方提供的SDK包,集成實現(xiàn)即可苹熏。該種實現(xiàn)還是需要把文檔提前下載到本地碟贾。
注:TBS是依托X5內核的,當手機中沒有X5內核的產品(如:微信轨域、QQ袱耽、QQ瀏覽器)時,就無法加載相關文檔
實例代碼如下:
導入庫:
implementation 'com.tencent.tbs.tbssdk:sdk:43903'
private void displayFile(File file) {
Bundle bundle = new Bundle();
bundle.putString("filePath", file.getAbsolutePath());
File tempPath = new File(getExternalCacheDir().getAbsolutePath(),"tempPath/"+file.getName());
if (!tempPath.getParentFile().exists()) {
tempPath.mkdirs();
}
bundle.putString("tempPath", tempPath.getAbsolutePath());
boolean result = mTbsReaderView.preOpen(getFileType(file.getAbsolutePath()), false);
if (result) {
mTbsReaderView.openFile(bundle);
}
}