如何使PDF文件在HTML链接中可下载?

2022-08-30 06:58:51

我正在我的网页上提供pdf文件的链接以供下载,如下所示

<a href="myfile.pdf">Download Brochure</a>

问题是当用户单击此链接时,然后

  • 如果用户已安装 Adobe Acrobat,则会在 Adobe Reader 的同一浏览器窗口中打开该文件。
  • 如果未安装 Adobe Acrobat,则会弹出给用户以下载文件。

但是我希望它始终弹出给用户进行下载,无论是否安装了“Adobe acrobat”。

请告诉我该怎么做?


答案 1

这是一个常见问题,但很少有人知道有一个简单的HTML 5解决方案:

<a href="./directory/yourfile.pdf" download="newfilename">Download the pdf</a>

其中 是建议用户保存文件的文件名。或者,如果您将其留空,它将默认为服务器端的文件名,如下所示:newfilename

<a href="./directory/yourfile.pdf" download>Download the pdf</a>

兼容性:我在Firefox 21和Iron上测试了这个,两者都工作正常。它可能不适用于HTML5不兼容或过时的浏览器。我测试的唯一没有强制下载的浏览器是IE...

在此处检查兼容性:http://caniuse.com/#feat=download


答案 2

不要链接到.PDF文件,而是执行类似操作

<a href="pdf_server.php?file=pdffilename">Download my eBook</a>

输出自定义标题,打开PDF(二进制保险箱)并将数据打印到用户的浏览器,然后他们可以选择保存PDF,尽管他们的浏览器设置。pdf_server.php应如下所示:

header("Content-Type: application/octet-stream");

$file = $_GET["file"] .".pdf";
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize($file));
flush(); // this doesn't really matter.
$fp = fopen($file, "r");
while (!feof($fp))
{
    echo fread($fp, 65536);
    flush(); // this is essential for large downloads
} 
fclose($fp); 

PS:并且显然对“file”变量运行一些健全性检查,以防止人们窃取您的文件,例如不接受文件扩展名,拒绝斜杠,向值添加.pdf


推荐