如何在不先“下载”的情况下通过 Android 网络浏览器显示 PDF

Posted

技术标签:

【中文标题】如何在不先“下载”的情况下通过 Android 网络浏览器显示 PDF【英文标题】:How to display a PDF via Android web browser without "downloading" first 【发布时间】:2011-11-18 06:02:58 【问题描述】:

有没有办法让普通的 android 浏览器自动打开 PDF、Word 或其他典型文件,而无需执行下载文件的过程,然后让用户从“下载”应用或通知栏?

我们有一个 Web 应用程序,其中包含许多我们想要包含但不必转换为 html 的文档,但是让用户下载文件并手动打开它并不容易培训用户。

ios 上,这些文件都内联显示在浏览器中。我想要一种让浏览器自动启动文件到 Acrobat Reader 或 QuickOffice 或用户必须显示它们的任何程序的方法。

有人知道怎么做吗?我知道 Google Docs 有一些 PDF 查看支持,但使用我们的网络应用程序的人可能无法在所有情况下都访问公共互联网,并且可能会访问本地网络服务器。

【问题讨论】:

我从未见过它以这种方式工作。话虽如此,我想您可以创建自己的浏览器,该浏览器能够解码和正确显示 pdf 文件。我只是不相信任何流行的浏览器都支持这一点。 您的 PDF 文件是否针对“快速 Web 视图”进行了优化?如果不是,它们在下载过程中无法显示 - 因此它们只能被下载然后显示。 【参考方案1】:

您可以在 Google Docs Viewer 中打开 PDF 文件,方法是将 URL 附加到:

http://docs.google.com/gview?embedded=true&url=<URL of a supported doc>

这将在默认浏览器或 WebView 中打开 PDF 文件。

提供了支持的格式列表here。

【讨论】:

这很有帮助,谢谢。我不确定这是否 100% 必要,但可能值得一提的是, 应该是 urlencoded。 这对我不起作用...它只是显示一个页面“糟糕!预览此文档时出现问题”,并带有一个下载按钮。单击下载按钮时没有任何反应。 以上链接无法在 Android 上运行 Chrome,我切换到 https://drive.google.com/viewerng/viewer?embedded=true&amp;url=#### 并且成功了! 嗨,答案中的网址似乎不再有效。我现在在 webView 监听器中得到一个无限循环。 QFDev 在评论中发布的网址正在运行。 对不起,但这个技巧对我从来没有用过,它总是返回相同的错误“没有可用的预览”:-(【参考方案2】:

您可以从 2017-04-06 开始使用此格式。

https://docs.google.com/viewerng/viewer?url=http://yourfile.pdf

只需将http://yourfile.pdf 替换为您使用的链接即可。

【讨论】:

无需完全下载即可获得预览的完美方式。 完美答案。 这是一种解决方法,需要 google 获取文档的副本(并使文档可通过 Internet 公开访问)。不是问题的真正答案,从安全/隐私的角度来看绝对是毁灭性的。【参考方案3】:
String format = "https://drive.google.com/viewerng/viewer?embedded=true&url=%s";
String fullPath = String.format(Locale.ENGLISH, format, "PDF_URL_HERE");
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fullPath));
startActivity(browserIntent);

【讨论】:

这是一种解决方法,需要 google 获取文档的副本(并使文档可通过 Internet 公开访问)。不是问题的真正答案,从安全/隐私的角度来看绝对是毁灭性的。【参考方案4】:

具体来说,要为 Firefox 安装 pdf.js 插件,您无需使用应用商店。相反,从 Mozilla 内部转到 addons.mozilla.org 并从那里安装它。

另外,要查看它是否安装正确,请转到菜单 ToolsAdd-ons(而不是您可能从桌面版)。

【讨论】:

【参考方案5】:

很遗憾,Android 设备上的原生浏览器不支持这种类型的文件。让我们看看在 4.0 中我们是否能够做到这一点。

【讨论】:

【参考方案6】:

我也需要这个,但上面的链接停止工作了,所以我发现这可以与新的 Google Drive 一起使用:

Google 有一项服务可以为不在 GDrive 中的 PDF 创建链接: https://docs.google.com/viewer 只需添加您的 URL,它就会创建一个链接和 IFrame 代码 (仔细观察,您将看到模式并在没有此 Web 服务的情况下创建链接)

此外,还有一种方法可以对存储在 Google Drive 中的 PDF 执行此操作: https://docs.google.com/viewer?srcid=YOUR_GDRIVE_PDF_DOC_ID_HERE&pid=explorer&efh=false&a=v&chrome=false&embedded=true (这可以是链接或 iframe 的 src URL)

我已经在 Android 上进行了测试,它可以很好地打开 PDF 查看器。

【讨论】:

对我来说,如果我目前没有使用谷歌帐户登录,那么它会将我带到登录页面。有没有办法绕过这个而只查看pdf? 尝试使用viewerjs.org viewer.js 文件看起来很有希望,因为它独立于浏览器并且依赖于您的服务器来完成繁重的工作。 这是一种解决方法,需要 google 获取文档的副本(并使文档可通过 Internet 公开访问)。不是问题的真正答案,从安全/隐私的角度来看绝对是毁灭性的。 哪些链接停止工作?在特定的答案中? 好的,海报是 2017 年离开大楼的。其他人可以插话吗?【参考方案7】:

你可以用这个

webView.loadUrl("https://docs.google.com/viewer?url=" + "url of pdf file"); 

【讨论】:

谁能说说投反对票的原因。 可能是,你的答案对某些编程技术很有效,答案可能只是 URL,甚至我可以将它添加到锚标记中,这已经在上面提到了 @akash 也许你需要添加更多解释。这是这里的规则 这是一种解决方法,需要 google 获取文档的副本(并使文档可通过 Internet 公开访问)。这不是问题的真正答案,从安全/隐私的角度来看绝对是毁灭性的。【参考方案8】:

试试下面的。它对我有用。

WebView view = (WebView) findViewById(R.id.yourWebView);

view.getSettings().setjavascriptEnabled(true);
view.getSettings().setPluginState(WebSettings.PluginState.ON);
view.loadUrl("http://docs.google.com/gview?embedded=true&url="
              +"your document link(pdf,doc,docx...etc)");

【讨论】:

setPluginState ON 很重要,谢谢提及 @BeeingJk, setPluginState 已从 API 18 (***.com/questions/19362049/…) 中弃用。 @CoolMind 你在链接中显示的是setPluginsEnabled 而不是setPluginState @BeeingJk,请再次打开页面,按Ctrl + F,输入“setPluginState”并按Enter。 @CoolMind 好的,谢谢,我在这里也看到了,developer.android.com/reference/android/webkit/…,但我无法删除 setPluginState,否则我的 webview 将无法工作【参考方案9】:
public class MainActivity extends AppCompatActivity 

    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                openURL("http://docs.google.com/viewer?url=" + " your pdf link ");
            
        );
    

    private void openURL(String s) 
        Uri uri = Uri.parse(s);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(uri,"text/html");
        startActivity(intent);
    

【讨论】:

这是一种解决方法,需要 google 获取文档的副本(并使文档可通过 Internet 公开访问)。这不是问题的真正答案,从安全/隐私的角度来看绝对是毁灭性的。【参考方案10】:

为Android下载Acrobat Reader .apk文件以显示PDF文件

将您的 PDF 文件放在SD card

使用下面代码的sn-p

 File file = new File("/sdcard/test.pdf");
 Uri path = Uri.fromFile(file);
 Intent i = new Intent(Intent.ACTION_VIEW);
 i.setDataAndType(path,"application/pdf");
 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(i);

【讨论】:

这是一个网页浏览器,而不是一个原生的安卓应用程序。 -1

以上是关于如何在不先“下载”的情况下通过 Android 网络浏览器显示 PDF的主要内容,如果未能解决你的问题,请参考以下文章

如何在不先加载到 RAM 的情况下将文件加载到 blob 中?

如何在不先定义表中的列的情况下将数据加载到 PostgreSQL 中?

是否可以在不先阅读的情况下更改rails中的记录

如何在不先启动 IE 的情况下使我的 WinCE 应用程序中的网络工作?

在 PHP 中是不是可以在不先提取其内容的情况下检查 Zip 文件的内容?

如何在不下载 Android Studio 的情况下下载 Android SDK?