我正在为我的angular2 web应用程序构建一个页面,用户可以在其中从列表中选择客户并打印信件以邮寄他们。这些信件以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有哪些选项?

最佳答案

根据丹尼尔A怀特的建议,我解决了这个问题。我决定不使用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();
}

09-25 18:28
查看更多