直接从JavaScript打印PDF

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我正在建立一个HTML列表的PDF。在列表中,我想包括下载链接和打印按钮/链接。有没有办法直接打开PDF的打印对话框,而不需要用户看到PDF或打开PDF查看器?

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

提问于
用户回答回答于

它使用<embed>标签将PDF嵌入到文档中:

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

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

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传递给函数即可。一旦PDF加载,它将创建一个iframe并触发打印。

请注意,该功能不会破坏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;
}

扫码关注云+社区