【发布时间】:2012-03-12 04:47:02
【问题描述】:
我以前从未想过这个问题,但是有没有办法控制用户单击 PDF 文件的链接时会发生什么?
我的老板想提供两个链接来执行以下操作: 1. 在浏览器中查看此 PDF 2. 下载PDF
有没有办法做到这一点?我不考虑这些事情,大多数现代浏览器都会在浏览器中打开 PDF。如果我想下载它,我右键单击下载。有什么方法可以强制执行?
谢谢
【问题讨论】:
我以前从未想过这个问题,但是有没有办法控制用户单击 PDF 文件的链接时会发生什么?
我的老板想提供两个链接来执行以下操作: 1. 在浏览器中查看此 PDF 2. 下载PDF
有没有办法做到这一点?我不考虑这些事情,大多数现代浏览器都会在浏览器中打开 PDF。如果我想下载它,我右键单击下载。有什么方法可以强制执行?
谢谢
【问题讨论】:
您可以链接到资产,也可以将数据流式传输到浏览器。这些是您唯一的两个选择。
如果您链接到一个文件:<a href="file.pdf"> 它是否在浏览器中打开完全取决于最终用户的浏览器和操作系统偏好。
您可以强制下载文件,但是通过将其流式传输到浏览器,这通常会触发浏览器的save as 对话框。
不过,从用户体验的角度来看,您最好的选择是简单地链接到 PDF 并让用户知道他们将要点击 PDF 链接...这样他们就可以决定如何使用它.
【讨论】:
PDF 的显示方式取决于用户的浏览器版本和配置。例如,Chrome 默认包含一个 PDF 查看器,但用户可以更改插件的行为(自动打开 PDF、禁用、询问用户)。
一种方法是设置 ContentType 和 Content-Disposition 以便浏览器知道如何处理请求。例如,在 ASP.NET 中,您可以这样做:
Response.ContentType = "应用程序/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=filename.pdf");
披露:我从this article劫持了这段代码
如果这有帮助,请告诉我。
【讨论】:
有几种使用服务器端技术的方法:
您可以链接到提供文件下载的 .net / php 页面,例如:
<a href="/ServeFile.aspx?filename=sample.pdf">download pdf</a>
或显示:
<a href="/sample.pdf">view pdf</a>
如果您使用 itextsharp 生成 pdf,您可以将以下内容添加到 Response 对象以强制下载:
Response.AddHeader(
"Content-Disposition",
"attachment; filename=itext.pdf"
);
或以下在同一窗口中打开:
Response.AddHeader(
"Content-disposition",
"inline; filename=itext.pdf");
用户始终可以将他们的 adobe reader 插件设置为始终下载,在这种情况下,浏览器窗口显示将不起作用。
【讨论】: