【问题标题】:forcing a pdf to download when clicked on button单击按钮时强制下载pdf
【发布时间】:2013-02-16 20:33:55
【问题描述】:

我有一个backbonejs 视图,其中包含一个“下载pdf”按钮。我也有可以找到 pdf 的 url。我希望当用户单击按钮时,会下载 pdf 文件。有可能吗?

编辑:我在backbone.js 中的视图代码

savendownload: function () {
  this.$("#saveanddownload").button('loading');

  var that = this;
  var formData = this.fetchData();
  if (formData) window.invoices.create({
    buyer: formData.buyer,
    items: formData.items,
    company: formData.company,
    action: "savendownload"
  }, {
    wait: true,
    success: function (model) {
      var data = model.toJSON();

      var filename = data.filename;
      //download code here
    }
  });
}

【问题讨论】:

标签: javascript jquery backbone.js pdf-generation


【解决方案1】:

不要使用按钮,使用链接并将href 属性设置为 PDF 文件的 URL。浏览器将根据用户的浏览器偏好为您处理文件下载。

<a href="your/file.pdf" />

如果您需要链接看起来像一个按钮,您可以使用 CSS 设置它的样式。例如,请参见 SO thread

编辑: AFAIK,您无法可靠地初始化从 javascript 下载的文件。您可以做的是使用您的 pdf URL 打开一个新窗口/标签:

window.open("http://domain.com/document.pdf",'_blank');

但是用户的浏览器可以阻止新窗口的创建。您可能只想生成一个下载链接:

$('<a>Click here to download PDF</a>').attr('href', filename).appendTo(that.$el);

并让用户单击链接以启动文件下载。

【讨论】:

  • @beNerd,您可能应该将其包含在您的原始问题中......无论如何,编辑答案。没有灵丹妙药。
  • 这会起作用,但如果您想强制下载,响应服务器还需要将 Content-Disposition 标头设置为“附件”:stackoverflow.com/questions/8875949/…
  • @Ben,没错,但我认为让浏览器做出决定更有意义。这是大多数情况下用户所期望的,如果他们想自己强制下载,可以Save link as...
【解决方案2】:

使用“下载”标签

<a href="assets/pdfs/yourdocument.pdf" download>Download PDF</a>

但不能在 IE Explorer 中使用 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多