java - 关于渲染PDF和修改Uri

标签 java android-studio pdf firebase firebase-storage

我正在尝试使用 WebView 呈现 PDF 链接。我尝试渲染的链接由我的应用程序上传到 firebase 数据库。

当链接在 iOS 设备上成功呈现时。它不在 Android 上。

我强烈推测所有这些困惑背后的原因是 firebase 链接。

如果我尝试从网络呈现正常的 pdf 链接。

String pdf_sample = "http://www.adobe.com/devnet/acrobat/pdfs/pdf_open_parameters.pdf";
    String googleDocs = "https://docs.google.com/viewer?url=";

    Webviewz.getSettings().setJavaScriptEnabled(true);
    Webviewz.loadUrl(googleDocs + pdf_sample);

成功渲染 PDF

image -SUCCESSSFULLY- displaying a normal PDF Url

但是,如果我依赖并尝试显示和渲染 Firebase 数据库中的 PDF 链接,我会通过 Google 文档获得此空白的深灰色背景以及无预览可用的标志

    String Firebase_link_failure = "https://firebasestorage.googleapis.com/v0/b/jouska-aabee.appspot.com/o/PDF_files%2F305?alt=media&token=b9cf2fa6-f6ff-4a3b-8908-9eac294c4668";
    String googleDocs = "https://docs.google.com/viewer?url=";

    Webviewz.getSettings().setJavaScriptEnabled(true);
    Webviewz.loadUrl(googleDocs + Firebase_link_failure);

导致没有可用的预览

image -FAILURE- displaying a Firebase PDF link on android devices

The solution suggested by the user sphippen worked out. Using the UrlEncoder on the firebase link, The pdf was successfully rendered. Below is the single modification made.

Webviewz.loadUrl(googleDocs+ URLEncoder.encode(firebase_link, "utf-8"));

最佳答案

看起来问题在于您只是附加两个字符串来形成 URL:

Webviewz.loadUrl(googleDocs + pdf_sample);

查看完整的 URL(使用代码示例中的值):

https://docs.google.com/viewer?url=https://firebasestorage.googleapis.com/v0/b/jouska-aabee.appspot.com/o/PDF_files%2F8828?alt=media&token=fab355da-47a6-4a27-894f-40798590a89a

alt=media后面的&字符结束url参数,因此页面尝试访问的URL就是https://firebasestorage.googleapis.com/v0/b/jouska-aabee.appspot.com/o/PDF_files%2F8828?alt=media ,其中不包含下载 token 。

您需要转义 Firebase 存储下载链接以用作 URL 参数(将 & 替换为 %26?%3F%%25 等)。 URLEncoder类应该有效:

URLEncoder.encode(pdf_sample, "UTF-8")

关于java - 关于渲染PDF和修改Uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595946/

相关文章:

javascript - 在移动版 Safari 中针对多页 PDF 强制打印对话框

android - 权限 READ_EXTERNAL_STORAGE 总是被拒绝

android-studio - 如何在Android Studio的快速文件搜索中排除所有构建文件?

java - 当我在计时器上调用 isRunning() 方法时,图像不会显示

java - playframework2.0中的自定义标签或在模板中执行 equals

java - 更改选定状态下的按钮形状?

python - 将扫描的pdf转换为文本python

java - 如何将java swing面板转换为高质量图像

java - Android 应用程序中的 SimpleExpandableListAdapter 问题

java - Java中使用数组的二叉搜索树