直接从 JavaScript 打印 PDF
2022-08-30 05:43:23
我正在用HTML构建PDF列表。在列表中,我想包括一个下载链接和一个打印按钮/链接。有没有办法直接打开 PDF 的“打印”对话框,而用户不会看到 PDF 或打开 PDF 查看器?
将PDF下载到隐藏的iframe中并触发它使用JavaScript打印的一些变化?
我正在用HTML构建PDF列表。在列表中,我想包括一个下载链接和一个打印按钮/链接。有没有办法直接打开 PDF 的“打印”对话框,而用户不会看到 PDF 或打开 PDF 查看器?
将PDF下载到隐藏的iframe中并触发它使用JavaScript打印的一些变化?
根据下面的评论,它不再适用于现代浏览器
这个问题演示了一种可能对您有帮助的方法:静默打印嵌入式PDF
它使用标签将 PDF 嵌入到文档中:<embed>
<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();
}
}
您可以将嵌入放在隐藏的iframe中,然后从那里打印出来,从而为您提供无缝体验。
这是一个从iframe打印PDF的函数。
您只需要将 PDF 的 URL 传递给函数即可。它将创建一个 iframe,并在加载 PDF 后触发打印。
请注意,该函数不会破坏 iframe。相反,它每次调用函数时都会重用它。很难销毁 iframe,因为在打印完成之前需要它,并且打印方法没有回调支持(据我所知)。
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;
}