代码之家  ›  专栏  ›  技术社区  ›  paulsm4

createObjectURL(blob):如何为动态生成的.pdf提供“有意义的文件名”?[副本]

  •  5
  • paulsm4  · 技术社区  · 8 年前

    我正在调用一个Web服务来生成.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来说,它工作得很好:在AcrobatReader中出现.pdf,它显示,我可以打印它…它有一个“有意义的文件名”。

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

    但是,如果Chrome在Acrobat Reader中显示图像:

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

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

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

    如你所见,两者都不是 blob.name = title <iframe name=" + title + "...> 似乎有帮助。

    问:如果Chrome在外部查看器(如Acrobat)中打开一个动态生成的.pdf文件,我是否可以为它“分配一个有意义的名称”?

    1 回复  |  直到 8 年前
        1
  •  6
  •   Chris C.    8 年前

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

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

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

    推荐文章