如何显示wcf服务返回的pdf流的打印选项?

时间:2016-09-19 17:24:33

标签: javascript pdf-generation

我的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传输:"

0 个答案:

没有答案