Android之預覽PDF檔案

2021-09-24 20:34:59 字數 1822 閱讀 9293

上週臨時收到客戶的說明書,說要放在應用裡顯示,本來覺得乙個非常簡單的事情沒想到一波三折。

第一波:我使用了pdfviewer控制項:(相了解的可以檢視:

遇到的坑就是 因為裝置是橫屏的,這個控制項在手機上預覽pdf很不錯,我一下子沒有找到橫向鋪滿的方法,因此顯示起來頁面顯的非常小,由於時間比較急沒有去細細研究所以棄用了。

第二波:到這個時候我就立馬換了乙個思路。改用webview,過程稍微複雜點 但是效果還是不錯的 滿足了需求。

然後就是使用:布局檔案就不貼出來了。

private void loadwebpdf() 

webview.loadurl("file:///android_asset/pdfjs/web/viewer.html?file=" + "file:///android_asset/vehicle-help-chinese.pdf");

}

感覺一切都是相當的完美。如果是一般應用到這裡也就沒什麼問題了。

第三波: 執行的時候發現系統一直報 error inflating class android.webkit.webview.這就很尷尬了,然後查了下,試了幾個方法都沒有用,後面仔細看還有for security reasons, webview is not allowed in privileged processesfor security reasons, webview is not allowed in privileged processes(出於安全原因,特權程序中不允許使用webview。出於安全原因,特權程序中不允許使用webview)。這就很尷尬了,忘了說了應用是系統及應用系統版本7.1.2。(android開發系統應用(android.uid.system)使用webview報錯)。

查了下 谷歌不知道從啥時候開始全面禁止系統應用使用webview。檢視原始碼獲悉在webviewfactory**中某個靜態例項初始化之前判斷api版本並丟擲錯誤。知道是這個原因後,心裡有底了,方法總比困難多嘛,既然準備用webview來預覽pdf了就不要輕易放棄。方向如下:

在使用webview之前,使用hook(鉤子)方法,給該變數賦值。哈哈 這樣就可以避免這個問題了;**如下:

/**

* 使用webview避免系統檢查丟擲異常

*/public static void checkwebview()

method getproviderclassmethod;

if (sdkint > 22) else if (sdkint == 22) else

getproviderclassmethod.setaccessible(true);

class<?> providerclass = (class<?>) getproviderclassmethod.invoke(factoryclass);

class<?> delegateclass = class.forname("android.webkit.webviewdelegate");

constructor<?> providerconstructor = providerclass.getconstructor(delegateclass);

if (providerconstructor != null)

} catch (throwable e)

}

搞定收工,預覽了下效果還是蠻不錯的。只是載入稍微有點點慢。

最近在優化記憶體發現這個由於用的webview記憶體占用比較大,而且退出後記憶體降不下去。導致整個應用記憶體占用比較大。測試了很大方法都不能從根本上解決,最後只好把介面設定成乙個單獨的程序。介面退出的時候直接system.exit(0);

PDF預覽 pdfJS預覽pdf檔案

方式1 檔案流轉為blob let urlsrc window.url.createobjecturl blob this src urlsrc pdf空白頁 else 正確解析了頁碼,但是每頁空白。解決方法 responsetype blob html visible.sync dialo isi...

前端js實現預覽pdf檔案

一 採用pdfobeject.js外掛程式,優點 支援pdf輸入開啟口令,缺點 不支援手機瀏覽器 其實就光看這個 也足夠了,主要 二 採用touchpdf.js外掛程式,實現手機端預覽pdf檔案,缺點 pdf不能設定開啟口令,否則js報錯passwordexception,上網未找到解決辦法 主要參...

使用vue預覽PDF

效果圖 講解之前先看案例,強烈推薦此專案vue pdf.js demo 前端 方法 filepreview row console.log handledownbyurlbypost2 admin sys file getfilebybucket name,then response catch r...