使用 WebView 配合 pdf.js 在 Android 上顯示 PDF 文件 ...
最近在 手機上要顯示 PDF 文件,在搜索引擎上找到了很多方案,大體上有以下幾種:
- 使用提供的線上服務,例如 Google 文檔預覽服務,mWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="+ pdfUrl);
- 使用 AndroidPdfViewer,這是一個 GitHub 上開源的庫,除了體積大點別的都挺好, https://github.com/barteksc/AndroidPdfViewer
- 使用 Moliza 開源的 Pdf.js 這個庫是很強大的,配合 WebView ,可以支持預覽,縮放,翻頁等等功能
- 使用 騰訊瀏覽服務 https://x5.tencent.com/
我是選擇了 pdf.js 這個庫,使用 WebView 配合 H5 頁面,可以做到隨意的自定義,並且體積很小,放在伺服器的話就更小了。
- 使用資源:https://github.com/mozilla/pdf.js
- 版本 版本是 2.3.200
在這裡記錄下使用的過程也方便後來者。
考慮到網路不穩定的情況,所以我把 js 庫下載下來了,不介意的可以直接使用網路庫
- https://www.jsdelivr.com/package/npm/pdfjs-dist
- https://cdnjs.com/libraries/pdf.js
- https://unpkg.com/pdfjs-dist/
剛開始使用時,直接使用提供的 API 創建 canvas ,每一頁創建一個 canvas 然後排列下來,因為有其他的內容要顯示。
開發測試的時候因為文件小,並且是在電腦上瀏覽的沒有發現什麼問題,在手機上測試的時候使用了一個稍微大點的文件,記憶體立馬就爆了。
因為是在載入完成後,每頁都創建一個 canvas 顯示,沒有做到逐頁載入,也沒有做任何迴圈使用和銷毀的處理,記憶體就爆了。
在 pdf.js 的例子里看到了在手機上使用的例子,就改了改,它這個做到了迴圈使用 canvas,並且是逐頁載入。
修改之後在手機上使用 32M 的文件輕鬆無壓力。示例,傳送門
簡單寫了個 Demo :https://github.com/skymxc/Example/tree/master/displaypdf
assets 目錄是修改後的頁面。
顯示網路文件還是要下載到本地才可以,因為跨域訪問的限制問題。
End