Javascript createObjectURL(blob):我如何给出一个";“有意义的文件名”;到动态生成的.pdf?

Javascript createObjectURL(blob):我如何给出一个";“有意义的文件名”;到动态生成的.pdf?,javascript,html,iframe,Javascript,Html,Iframe,我正在调用一个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() ===

我正在调用一个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;
var title=“Claim-”+this.claimNumber+“-”+新日期()+”.pdf”;
var blob=new blob([wsRequest.response],{type:'application/pdf'});
blob.name=标题;
如果(浏览器()=“IE”){
window.navigator.msSaveOrOpenBlob(blob,title);
}否则{
var fileURL=URL.createObjectURL(blob);
var win=window.open();
win.document.write(“”);
win.document.title=标题;
对于IE来说,它工作得很好:Acrobat Reader中出现了.pdf文件,它显示出来,我可以打印出来……而且它有一个“有意义的文件名”

对于Chrome/embedded.pdf浏览器,它也可以正常工作:它出现在它自己的选项卡中,并且该选项卡具有“一个有意义的文件名”

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

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

b) Acrobat显示GUID—由createObjectURL()指定的GUID:

示例:“blob:”

如您所见,
blob.name=title
似乎都没有帮助


问:如果Chrome在外部查看器(如Acrobat)中打开一个动态生成的.pdf文件,我有没有办法“指定一个有意义的名称”给它?

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

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

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

Hi-1)将文件保存到服务器:好主意,但不是一个选项。2)“另存为”而不是“打开”:这实际上是我的解决方法。我为“保存到文件,而不是打印”添加了一个配置选项。但这真的非常糟糕:(我不愿意牺牲所有“立即显示”选项)功能只是因为愚蠢的“文件名”。肯定有更好的方法。符合IE
msSaveOrOpenBlob
标准:(@palsm4)我也遇到了同样的问题。我需要在ajax调用中发送auth令牌,这就是为什么它不能只是指向服务器提供的文件的链接。您可能需要使用自己的pdf查看器,例如,您可以从中设置文档名。