【问题标题】:Loading PDFs via PDF.js with API 30使用 API 30 通过 PDF.js 加载 PDF
【发布时间】:2021-01-22 20:39:13
【问题描述】:

API 30 在 WebView 中引入了与文件访问相关的更改:

/**                                                                                            
 * Enables or disables file access within WebView.                                             
 * Note that this enables or disables file system access only. Assets and resources            
 * are still accessible using file:///android_asset and file:///android_res.                   
 * <p class="note">                                                                            
 * <b>Note:</b> Apps should not open {@code file://} URLs from any external source in          
 * WebView, don't enable this if your app accepts arbitrary URLs from external sources.        
 * It's recommended to always use                                                              
 * <a href="{@docRoot}reference/androidx/webkit/WebViewAssetLoader">                           
 * androidx.webkit.WebViewAssetLoader</a> to access files including assets and resources over  
 * {@code http(s)://} schemes, instead of {@code file://} URLs. To prevent possible security   
 * issues targeting {@link android.os.Build.VERSION_CODES#Q} and earlier, you should explicitly
 * set this value to {@code false}.                                                            
 * <p>                                                                                         
 * The default value is {@code true} for apps targeting                                        
 * {@link android.os.Build.VERSION_CODES#Q} and below, and {@code false} when targeting        
 * {@link android.os.Build.VERSION_CODES#R} and above.                                         
 */                                                                                            
public abstract void setAllowFileAccess(boolean allow);                                        

通过首先下载 PDF 然后通过"file:///android_asset/pdfjs/web/viewer.html?file=${path/to/file}" 显示它来使用 PDF.js 的应用程序将不再工作。强制 setAllowFileAccesstrue 是可能的,但不鼓励。

建议使用WebViewAssetLoader 作为替代方案,但它似乎适用于侧重于从/assets 目录或/res 目录加载本地文件的用例。

问题:

  1. 考虑到 API 30 中添加的限制,如何使用 PDF.js 加载本地 PDF 文件?
  2. 有没有办法使用WebViewAssetLoader 来加载保存在应用程序本地存储中的文件?

【问题讨论】:

  • 这个运气好吗?我尝试了 base64 方法并使其正常工作,但该解决方案无法生成大型 PDF:/

标签: android pdf android-webview pdf.js android-storage


【解决方案1】:

您可能想尝试使用https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader.InternalStoragePathHandler 它非常适合加载存储在应用程序 files 目录中的 pdf。

回答您的问题:

  1. 使用WebViewAssetLoader
  2. 使用InternalStoragePathHandler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2017-09-02
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多