关于渲染PDF和修改Uri

时间:2016-11-14 19:02:12

标签: java android-studio pdf firebase firebase-storage

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

虽然链接在iOS设备上成功呈现。它不在Android上。

我非常推测所有这些混乱背后的原因是火力链接。

如果我尝试从网络上呈现正常的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链接,我会通过谷歌文档获得这个空白的深灰色背景,并且没有预览可用

的标志
    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

  

用户 sphippen 建议的解决方案已经解决。使用firebase链接上的UrlEncoder,成功呈现了pdf。以下是单一修改。

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

1 个答案:

答案 0 :(得分:3)

看起来问题是您只是附加两个字符串来形成您的网址:

Webviewz.loadUrl(googleDocs + pdf_sample);

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

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参数,因此该网页尝试访问的网址只有https://firebasestorage.googleapis.com/v0/b/jouska-aabee.appspot.com/o/PDF_files%2F8828?alt=media,其中不包含下载内容令牌。

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

%25