(HTML) 单击时下载 PDF 文件而不是在浏览器中打开它们

IT技术 javascript html
2021-01-12 05:57:48

我想知道如何使 PDF 文件链接可下载而不是在浏览器中打开它们?这是如何在 html 中完成的?(我假设它是通过 javascript 或其他方式完成的)。

6个回答

有了 html5,现在就可以了。在元素中设置“下载”属性。

<a href="http://link/to/file" download="FileName">Download it!</a>

来源:http : //updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

有没有一种方法可以指定 pdf 的文本而不是提及文件路径?我需要从 div html 创建 pdf,但我不想打开另一个窗口,下载应该像在这个答案中一样。
2021-03-13 05:57:48
截至 2019 年 8 月,此功能似乎增强了浏览器支持,请参阅:w3schools.com/tags/att_a_download.asp
2021-03-17 05:57:48
请注意,下载属性仅支持同源请求。
2021-03-19 05:57:48
我在下面添加了另一个答案(虽然这很糟糕),虽然这仍然是首选方式,但也许可以为不受支持的浏览器提供 hack 方式。
2021-04-04 05:57:48
如果支持,您最好使用此解决方案。这是一种检查它是否存在的方法if ("download" in document.createElement("a")){ ... }
2021-04-06 05:57:48

这只能通过服务器端代码设置 http 响应头来实现。即;

Content-Disposition: attachment; filename=fname.ext
apache的例子。flask示例。
2021-03-12 05:57:48
这是完美的答案 - 只需找到以适当的服务器端语言执行此操作的方法即可。
2021-03-14 05:57:48
不幸的是,即使内容配置是“附件”,iOS 仍会预览而不下载 pdf 文件。
2021-04-10 05:57:48

现在有HTML 5download属性可以处理这个问题。

我同意,并认为萨里姆的回答很好(如果 OP 回归,它可能应该是选择的答案)。然而,这个答案仍然是处理它的可靠方法(正如 Yiğit Yener 的回答所指出的那样——奇怪的是——人们同意)。虽然下载属性获得了支持,但它仍然参差不齐:

http://caniuse.com/#feat=download

您将需要使用 PHP 脚本(或其他服务器端语言)

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

并使用 httacces 重定向(重写)到 PHP 文件而不是 pdf

嗯,当我直接打开 php 文件时效果很好。但是当我尝试使用重定向时,例如: Redirect 301 /_PDFs/Catalogue.pdf http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.php并尝试打开 pdf 文件,它仍然在浏览器中打开原始文件,而不是下载重命名的版本...
2021-04-05 05:57:48
更新:当没有直接调用的文件时(在我的示例中为“目录.pdf”),它可以工作。然后重定向工作完美。谢谢!
2021-04-07 05:57:48

您可以使用

Response.AddHeader("Content-disposition", "attachment; filename=" + Name);

看看这个例子:

http://www.codeproject.com/KB/aspnet/textfile.aspx

这适用于 ASP.NET。我相信您可以在所有其他服务器端语言中找到类似的解决方案。但是,据我所知,没有 javascript 解决方案。

这就是答案(以及与 PHP 相关的答案)。关键是必须编辑 http 响应头。
2021-04-01 05:57:48