浏览器根据PDF路径调用文件打印

浏览器根据PDF路径调用文件打印

一般情况下都是通过 window.print()调用浏览器打印文件,但是此方法的原理是将HTML页面转为图片后打印,无法设置调整文件“适用于纸张大小操作”。
在这里插入图片描述
解决思路一:在新页面预览PDF,调用打印。

// 根据pdf路径生成的 Blob
        function getPdfBlob(pdfUrl) {
          return new Promise((resolve, reject) => {
            fetch(pdfUrl)
                .then(response => response.blob())
                .then(blob => resolve(blob))
                .catch(error => reject(error));
          });
        }
// 新页面预览pdf调用打印
        function printByWindow(url){
          // 在新标签页中打开 PDF
          const printWindow = window.open(url);
          if (printWindow) {
            printWindow.onload = function() {
              // 等待 PDF 加载完毕后再打印
              printWindow.print();
            };
          }
        }

解决思路二:新建一个隐藏的iframe,加载PDF,调用打印。

// 根据pdf路径生成的 Blob
        function getPdfBlob(pdfUrl) {
          return new Promise((resolve, reject) => {
            fetch(pdfUrl)
                .then(response => response.blob())
                .then(blob => resolve(blob))
                .catch(error => reject(error));
          });
        }
// 新建iframe调用打印
        function printByIframe(blobUrl){
          // 创建一个隐藏的 iframe
          const iframe = document.createElement('iframe');
          iframe.style.display = 'none'; // 隐藏 iframe
          iframe.src = blobUrl; // 设置 iframe 的 src 为 Blob URL

          // 将 iframe 添加到页面中
          document.body.appendChild(iframe);

          // 等待 iframe 加载完成(可能需要处理跨域问题)
          iframe.onload = function() {
            // 在这里,我们假设 PDF 已经在 iframe 中加载完成
            // 注意:PDF 的加载时间取决于 PDF 的大小和网络速度
            try {
              // 触发 iframe 的打印功能
              iframe.contentWindow.print();
            } catch (e) {
              console.error('Error printing PDF:', e);
            }
          };
        }

结果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用`window.print()`方法来实现浏览器调用打印打印文件流的功能,但是无法设置为静默打印。如果需要实现静默打印,可以使用 ActiveX 控件或者 WebBrowser 控件来实现。以下是一个使用 ActiveX 控件的例子: ```html <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> function doPrint() { var acro = new ActiveXObject("AcroPDF.PDF"); acro.src = "test.pdf"; acro.printAll(); } </script> </head> <body> <button onclick="doPrint()">Print</button> </body> </html> ``` 在以上示例中,我们通过创建 ActiveX 对象 `AcroPDF.PDF`,并指定要打印文件路径,然后调用 `printAll()` 方法实现打印。请注意,这种方法只能在 IE 浏览器中使用,而且需要用户在浏览器设置中启用 ActiveX 控件。因此,这种方法不是很推荐使用。 如果需要实现跨浏览器的静默打印功能,可以使用 WebBrowser 控件。以下是一个使用 WebBrowser 控件的例子: ```html <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> function doPrint() { var webBrowser = document.getElementById("webBrowser"); webBrowser.src = "test.pdf"; webBrowser.execWB(6, 1); } </script> </head> <body> <object id="webBrowser" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" style="display:none;"></object> <button onclick="doPrint()">Print</button> </body> </html> ``` 在以上示例中,我们创建了一个 WebBrowser 控件,并指定要打印文件路径,然后调用 `execWB()` 方法实现打印。请注意,这种方法需要用户在浏览器设置中启用 ActiveX 控件,并且只能在 IE 浏览器中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值