Android App內文檔展示方案整理

来源:https://www.cnblogs.com/renhui/archive/2019/12/11/12021782.html
-Advertisement-
Play Games

一、Word、Excel、PPT 展示 1. 微軟Office公開Api介面 如果文檔內容不是很機密或者只是需要實現預覽文檔的話,可以考慮使用微軟的公共Api介面實現。 微軟Office公開Api地址為:https://view.officeapps.live.com/op/view.aspx? 在 ...


一、Word、Excel、PPT 展示

1. 微軟Office公開Api介面

如果文檔內容不是很機密或者只是需要實現預覽文檔的話,可以考慮使用微軟的公共Api介面實現。

微軟Office公開Api地址為:https://view.officeapps.live.com/op/view.aspx?

在Android上實現的方式如下:

首先拼接預覽地址URL:

https://view.officeapps.live.com/op/view.aspx?src=http://xxx.pptx

然後使用WebView載入此URL。推薦配置如下:

WebSettings settings = mWebView.getSettings();
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
settings.setSaveFormData(true);
settings.setSavePassword(true);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setSupportZoom(true);

/*
 * 支持HTTPS、HTTP混合模式
 * http://blog.csdn.net/qq_16472137/article/details/54346078
 */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

// 優先渲染界面
settings.setRenderPriority(WebSettings.RenderPriority.HIGH);

// Technical settings
settings.setSupportMultipleWindows(true);

settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);
settings.setAppCacheMaxSize(8 * 1024 * 1024); // 緩存最多可以有8M

/* 支持cookies 5.0以上的手機不支持自動同步第三方cookies
 *(一般都是iframe裡面的頁面要存儲cookies操作的設置)
 * http://blog.sina.com.cn/s/blog_6e73239a0102viku.html
 */
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
}

// WebView 預設都是支持cookies
CookieManager.getInstance().setAcceptCookie(true);

註意:此使用方式是將文檔的URL拼接到連接上即可實現線上預覽office文件,而不需要去下載文件。

但是有如下問題:

  • 若是使用微軟的預覽介面,你的文檔url地址將會被暴露,缺失所謂文檔的安全性。
  • 若文件過大時候,載入的速度很慢,有時候還載入不出來。

2. 使用文檔瀏覽Paas服務

服務代表為:騰訊TBS瀏覽服務(免費)、百度文檔DOC服務(收費)。

對應的地址:https://x5.tencent.comhttps://cloud.baidu.com/doc/DOC/s/hjwvypsgp

騰訊TBS需要我們自行實現文件下載,然後調用的方TbsReadView法進行載入。

存在的問題:

a). 載入功能不穩定,有的機型載入正常,有的機型載入存在問題。最常見的問題就是 not supported by:xxx ,此問題非常影響用戶體驗。

b). 如果沒有安裝騰訊系的產品,TBS服務是無法使用了,因為騰訊系的產品都是基於X5內核的,TBS服務也是基於X5內核。

百度DOC服務不需要自行實現下載,邏輯相對簡單,但是需要收費。

存在的問題:未知(// TODO 目前還未做嘗試接入的事情,後續接入體驗後再整理 )

二、PDF 展示

1. 使用騰訊TBS服務

此方案基本和office文件載入的方案一樣,至於存在的問題也是一樣的。這裡就多贅述了。

2. AndroidPdfViewer

開源項目地址:https://github.com/barteksc/AndroidPdfViewer

開發參考文章:https://www.cnblogs.com/qixingchao/p/11658226.html

3. PdfViewPager

開源項目地址:https://github.com/voghDev/PdfViewPager

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文檔的壓縮和打包 .gz 表示由gzip壓縮工具壓縮的文件 .tar 表示由tar打包程式打包的文件 .tar.gz 先由tar打包,再由gzip壓縮 gzip壓縮工具 -d 該參數在解壓縮時使用 -# 表示壓縮等級,1為最差,9為最好,6為預設 xz壓縮工具 tar打包工具 ...
  • 配置雙主複製功能,在主1和主2上執行均下麵的步驟 vim syncprov_mod.ldif dn: cn=module,cn=configobjectClass: olcModuleListcn: moduleolcModulePath: /usr/lib64/openldapolcModuleL ...
  • 解析:在mysql 工具 搜索或者插入數據時報下麵錯誤: ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database_tl ...
  • 2019-12-11對varchar類型排序問題的解決 在mysql預設order by 只對數字與日期類型可以排序,但對於varchar字元型類型排序好像沒有用了,下麵我來給各位同學介紹varchar類型排序問題如何解決。 現象描述: select * from resultgroup where ...
  • #內連接select * from auth_user u inner join auth_group g on u.id = g.id; #左連接select * from auth_user a left join auth_group b on a.id = b.id; #右連接select ...
  • 問題描述:做scn恢復備庫的測試,吭哧了幾天,今天終於可以記錄一下,遇到了很多坑,作為初學者可以更好地理解DG,主要先關閉備庫,在主庫做歸檔丟失備庫無法同步,備庫產生GAP,然後增量備份恢復備庫,版本:SQL*Plus: Release 11.2.0.4.0 Production on Thu No ...
  • SELECT B.NAME,A.ROW_COUNT FROM SYS.DM_DB_PARTITION_STATS A,SYS.OBJECTS BWHERE A.OBJECT_ID=B.OBJECT_ID AND A.INDEX_ID<=1AND B.TYPE='U'AND A.ROW_COUNT>8 ...
  • 基礎數據所對應的類型不同 在Oracle中有一些基礎類型與Sqlserver中名字一樣,但是所存儲的數據格式不同,Date類型在Oracle中精確到秒,在Sqlserver中只能精確到分 表的結構 Oracle中所有的表都有一個共同的欄位,rowid這是在物理上存在的,記錄了每一條記錄的行位置,ro ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...