我正在调用一个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,它运行得很好:.pdf出现在Acrobat Reader中,显示,我可以打印它......它有一个“有意义的文件名”。
对于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“分配有意义的名称”?
答案 0 :(得分:4)
一种方法是在文件打开之前保存文件。不幸的是,这可能不会自动打开文件。
var fileLink = document.createElement('a');
fileLink.href = fileURL;
fileLink.download = title;
fileLink.click();
另一种方法是在Web服务器上生成PDF和文件名,并远程提供链接,而不是在浏览器中本地生成文件名。这可能会为您提供更一致的时间戳,因为它们是由您的服务器生成的,而不是由不同时区的所有客户端生成的。然后,如果他们有任何问题,您和您的客户将能够逻辑地引用相同的文档。