Javascript-打印从API返回的Blob内容

Javascript-打印从API返回的Blob内容,javascript,rest,angular,typescript,printing,Javascript,Rest,Angular,Typescript,Printing,我正在为我的angular2 web应用程序构建一个页面,用户可以从列表中选择客户并打印信件以发送给他们。这些信件作为PDF上传,并作为varbinary存储在数据库中 在多选的情况下,我只是简单地添加字节[],这样用户将打印一个包含所有要发送给客户的信件的文档 我能够成功地从API中提取blob,并返回内容类型为application pdf的blob,但是我不知道如何处理它 这是我的Angular2组件API调用: this.printQueueService.getPrintContent

我正在为我的angular2 web应用程序构建一个页面,用户可以从列表中选择客户并打印信件以发送给他们。这些信件作为
PDF
上传,并作为
varbinary
存储在数据库中

在多选的情况下,我只是简单地添加字节[],这样用户将打印一个包含所有要发送给客户的信件的文档

我能够成功地从API中提取blob,并返回内容类型为
application pdf
的blob,但是我不知道如何处理它

这是我的Angular2组件API调用:

this.printQueueService.getPrintContent(printRequests) //customers to receive letters
            .subscribe((data: Blob) => {
                var element: HTMLIFrameElement = <HTMLIFrameElement>document.getElementById('printFile');
                element.innerText = data + ""; //what do I do with the blob?
                element.contentWindow.print();
});
<iframe id="printFile" style="display:none"></iframe>
this.printQueueService.getPrintContent(printRequests)//客户接收信件
.订阅((数据:Blob)=>{
var元素:htmliframelement=document.getElementById('printFile');
element.innerText=data+“”;//如何处理blob?
element.contentWindow.print();
});
HTML元素:

this.printQueueService.getPrintContent(printRequests) //customers to receive letters
            .subscribe((data: Blob) => {
                var element: HTMLIFrameElement = <HTMLIFrameElement>document.getElementById('printFile');
                element.innerText = data + ""; //what do I do with the blob?
                element.contentWindow.print();
});
<iframe id="printFile" style="display:none"></iframe>

我知道我可以下载PDF并提示用户使用PDF查看器打印,但我不想强迫用户执行额外的步骤

我也不想尝试在浏览器中呈现PDF并打印,因为它假设用户有合适的插件,并且浏览器支持它

在浏览器中打印blob有哪些选项?

根据Daniel a.White的建议,我解决了这个问题。我决定不使用IFrame,因为这些打印文件可能非常庞大,而且
print()
函数包含页面名称作为脚注

相反,我选择在新选项卡中打开生成的PDF,如下所示:

if (window.navigator.msSaveOrOpenBlob) {
     window.navigator.msSaveOrOpenBlob(data, "PrintedLetters.pdf"); //IE is the worst!!!
}
else {
     var fileURL = URL.createObjectURL(data);
     var a: HTMLAnchorElement = document.createElement('a');
     a.href = fileURL;
     a.target = '_blank';
     document.body.appendChild(a);
     a.click();
}

您可以将其用作iframe的src的一部分,甚至更好。不要以这种方式设计您的api-在iframe中使用请求来获取pdf,否则您的js上下文将需要大量额外内存来处理。@DanielA.White在iframe中如何向api发出post请求?PDF是动态生成的。请发送您的帖子,但返回iframe可以使用的url。这将是第一种方法是。