使用打印按钮在浏览器中将字节数组显示为PDF?

时间:2016-12-09 11:40:29

标签: javascript html json pdf

我正在开发一个应用程序,我必须在浏览器上显示PDF。我通过webAPI从第三方获取PDF字节数组。我发现显示pdf的方法之一如下。

var pdfAsDataUri = "data:application/pdf;base64,"+byteArray;
window.open(pdfAsDataUri);

我不喜欢这种方法,因为它在URL中显示base64编码格式,是否有其他方法可以将字节数组转换为PDF并在HTML页面上显示以及打印对话框(window.print())。 / p>

1 个答案:

答案 0 :(得分:11)

在现代浏览器中,您可以使用Blobcreate an object URL,然后可以使用question代替base64网址(在不同浏览器中有一些限制,例如长度限制)。

这是一个可以做到这一点的工作示例。此示例在iframe内显示PDF,但您可以使用objectURL执行任何操作,例如在新选项卡中打开它或其他任何内容。



var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.onload = function() {

    // Create the Blob URL:
    var buffer = xhr.response;
    var blob = new Blob([buffer], {
        type: 'application/pdf'
    });
    var objectURL = URL.createObjectURL(blob);

    // Create an iframe to demonstrate it:
    var iframe = document.createElement('iframe');
    iframe.className = 'sample-iframe';
    iframe.src = objectURL;
    document.body.appendChild(iframe);
    console.log(objectURL);
};
xhr.open('GET', 'https://cors-anywhere.herokuapp.com/http://www.xmlpdf.com/manualfiles/hello-world.pdf', true);
xhr.send();

html, body {
  width: 100%;
  height: 100%;
}  
.sample-iframe {
  width: 90%;
  height: 90%;
}




当然,浏览器内置的PDF打印功能也可以使用。