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



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

在多选的情况下,我只是添加byte[],这样用户就可以打印一个文档,其中包含要发送给客户的所有信件。

我能够成功地从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();
});

HTML元素:

<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();
}

最新更新