我的wcf服务创建一个pdf流并返回它,通过ajax调用我正确处理新窗口中的显示并下载pdf文件。
我需要添加一个选项,它直接显示文档的打印选项。 我尝试使用iframe,但文档预览没有按预期正确显示pdf。
此代码可以正常下载:
var blob = b64toBlob(base64PDF, { type: 'application/pdf;' });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = f + ".pdf";
link.click();
这是我尝试将文档发送到打印机的代码:
var blob = b64toBlob(base64PDF, { type: 'application/pdf;' });
var iUrl = window.URL.createObjectURL(blob);
iUrl.download = f + ".pdf";
printPdf(iUrl);
function printPdf(url) {
var iframe = this._printIframe;
if (!this._printIframe) {
iframe = this._printIframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.style.display = 'none';
iframe.onload = function () {
setTimeout(function () {
iframe.focus();
iframe.contentWindow.print();
}, 1);
};
}
iframe.src = url;
}
我也尝试了其他一些不太好的方法。
var blob = b64toBlob(base64PDF, { type: 'application/pdf;' });
var iUrl = window.URL.createObjectURL(blob);
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = iUrl;
iframe.onload = function () {
setTimeout(function () {
iframe.focus();
iframe.contentWindow.print()
}, 1);
};
document.body.appendChild(iframe);
此代码打开打印窗口但文档看起来不对,我基本上得到了这个: Pdf print preview
由于我的pdf流是一个base64字符串,我认为我可以直接创建blob作为base 64,所以我尝试了这段代码
var blob = new Blob([base64PDF], { type: 'application/pdf;base64,' })
var iUrl = window.URL.createObjectURL(blob);
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = iUrl;
iframe.onload = function () {
setTimeout(function () {
iframe.focus();
iframe.contentWindow.print()
}, 1);
};
document.body.appendChild(iframe);
现在没有任何事情发生,我没有得到打印预览页面但是在控制台中我获得了#34;资源被解释为文档但是使用MIME类型application / pdf传输:"