直接从JavaScript打印PDF

我正在build立HTML的PDF列表。 在列表中,我想包括下载链接和打印button/链接。 有没有一些方法可以直接打开PDF的打印对话框,而无需用户看到PDF或打开PDF查看器?

将PDF下载到隐藏的iframe并触发它用JavaScript打印的一些变化?

这个问题演示了一种可能对您有帮助的方法: 无声打印embedded的PDF

它使用<embed>标签将PDFembedded到文档中:

 <embed type="application/pdf" src="path_to_pdf_document.pdf" id="pdfDocument" width="100%" height="100%" /> 

然后在加载PDF时调用JavaScript中的元素的.print()方法:

 function printDocument(documentId) { var doc = document.getElementById(documentId); //Wait until PDF is ready to print if (typeof doc.print === 'undefined') { setTimeout(function(){printDocument(documentId);}, 1000); } else { doc.print(); } } 

您可以将embedded的内容放在隐藏的iframe中,然后从那里打印,为您提供无缝的体验。

这是一个从iframe打印PDF的function。

您只需要将PDF的URL传递给函数。 它将创build一个iframe并在PDF加载后触发打印。

请注意,该function不会破坏iframe。 相反,每次调用函数时都会重用它。 很难摧毁iframe,因为它是需要的,直到打印完成,打印方法没有callback支持(据我所知)。

 printPdf = function (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; } 

https://github.com/mozilla/pdf.js/

现场演示http://mozilla.github.io/pdf.js/

这可能是你想要的,但我不明白这一点,因为现代浏览器包括这样的function,它也将在移动设备等低功耗设备上运行非常缓慢,顺便说一下,他们有自己优化的插件和应用程序。

http://printjs.crabbly.com/下载Print.js

 $http({ url: "", method: "GET", headers: { "Content-type": "application/pdf" }, responseType: "arraybuffer" }).success(function (data, status, headers, config) { var pdfFile = new Blob([data], { type: "application/pdf" }); var pdfUrl = URL.createObjectURL(pdfFile); //window.open(pdfUrl); printJS(pdfUrl); //var printwWindow = $window.open(pdfUrl); //printwWindow.print(); }).error(function (data, status, headers, config) { alert("Sorry, something went wrong") });