我正在为 angular2 网络应用程序构建一个页面,用户可以从列表中选择客户并打印信件以邮寄它们。这些字母上传为PDFs
,并以varbinary
的形式存储在数据库中。
在多项选择的情况下,我只是附加byte [],以便用户打印一个包含要发送给客户的所有字母的文档。
我能够从API中成功提取blob并使用内容类型application-pdf
返回它,但后来我不知道如何处理它。
这是我的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 Viewer进行打印,但我不想强迫用户执行额外的步骤。
我也不想尝试在浏览器中渲染PDF并打印,因为它假定用户拥有适当的插件并且浏览器支持它。
我在浏览器中打印blob有哪些选项?
答案 0 :(得分:3)
根据 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();
}