【问题标题】:URL.createObjectURL(blob): How do I give a "meaningful filename" to a dynamically generated .pdf? [duplicate]URL.createObjectURL(blob):如何为动态生成的 .pdf 提供“有意义的文件名”? [复制]
【发布时间】:2018-11-07 11:08:16
【问题描述】:

我正在调用一个网络服务来生成一个 .pdf,然后使用 createObjectURL 和 iframe 来打印和显示它:

    var title = "Claim-" + this.claimNumber + "-" + new Date() + ".pdf";
    var blob = new Blob([wsRequest.response], { type: 'application/pdf' });
    blob.name = title;
    if (browser() === 'IE') {
        window.navigator.msSaveOrOpenBlob(blob, title);
    } else {
        var fileURL = URL.createObjectURL(blob);
        var win = window.open();
        win.document.write('<iframe name="' + title + '" src="' + fileURL + '" frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;" allowfullscreen></iframe>');
        win.document.title = title;

对于 IE,它非常好用:.pdf 出现在 Acrobat Reader 中,它可以显示,我可以打印它……它有一个“有意义的文件名”。

对于 Chrome/嵌入式 .pdf 查看器,它也可以正常工作:它出现在自己的选项卡中,并且该选项卡具有“有意义的文件名”。

但是,如果 Chrome 在 Acrobat 阅读器中显示图像:

a) 我得到一个新的空白标签(带有“有意义的名称”)

b) Acrobat 显示一个 GUID - createObjectURL() 分配的 GUID:

示例:“blob:http://192.168.116.170:9080/dd554e89-0174-4b9a-bbd1-0934239a4c9

如您所见,blob.name = title&lt;iframe name=" + title + "...&gt; 似乎都没有帮助。

问:如果 Chrome 在外部查看器(如 Acrobat)中打开动态生成的 .pdf,我有什么方法可以“为其指定一个有意义的名称”?

【问题讨论】:

  • 您可能想要使用自己的 pdf 查看器,例如 pdf.js,您可以在其中设置文档名称。

标签: javascript html iframe


【解决方案1】:

一种方法是在打开文件之前用文件名保存文件。不幸的是,这可能不会自动打开文件。

var fileLink = document.createElement('a');
fileLink.href = fileURL;
fileLink.download = title;
fileLink.click();

另一种方法是在您的 Web 服务器上生成 PDF 和文件名,并远程提供链接,而不是在浏览器中本地生成文件名。这可能会为您提供更一致的时间戳,因为它们是由您的服务器生成的,而不是由不同时区的所有客户端生成的。然后,如果您和您的客户有任何疑问,他们将能够在逻辑上参考相同的文档。

【讨论】:

  • 嗨 - 1) 将文件保存到服务器:好主意,但不是一个选项。 2)“另存为”而不是“打开”:这实际上是我的解决方法。我为“保存到文件,而不是打印”添加了一个配置选项。但这真的非常糟糕:(我不想仅仅因为愚蠢的“文件名”而牺牲所有“立即显示”功能。有 GOT 是一种更好的方法。符合标准的等价物到 IE msSaveOrOpenBlob :(
  • @paulsm4 我遇到了同样的问题。我需要在 ajax 调用中发送身份验证令牌,原因是它不能只是到服务器服务文件的链接。
猜你喜欢
  • 2019-06-15
  • 2023-04-09
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2017-02-17
  • 2011-10-03
相关资源
最近更新 更多