打印按钮打印多页

Dav*_*ton 5 javascript coldfusion jquery

我正在尝试创建一个打印按钮,单击该按钮即可打印多个 pdf 或文件。

是否可以有一个打印全部按钮:

<button class="btn-u btn-u-orange" name="printall" id="printall" ><i class="icon-printer"></i> Print All</button>
Run Code Online (Sandbox Code Playgroud)

但随后以某种方式让它在单击时打印所有 pdf 或页面。我一直在尝试用 javascript 来做到这一点,但不幸的是我失败了。

    function PrintAll() {
        var pages =  ["forms/82040PDFCreator.cfm", "forms/poa.cfm", "forms/Billofsalevehicle.cfm"];
        for (var i = 0; i < pages.length; i++) {
            var oWindow = window.open(pages[i], "print");
            oWindow.print();
            oWindow.close();
        }
    }

$("#printall").on("click",function(){
        PrintAll();
    });
Run Code Online (Sandbox Code Playgroud)

当我选择打印时,它只弹出第一个要打印的 pdf 文件,而没有其他内容。任何对此的帮助将不胜感激。

添加了 Coldfusion 标签,因为我正在调用填充 pdf 的 .cfms。

Iv 尝试的是创建 Iframe:

<iframe src="forms/82040PDFCreator.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
<iframe src="forms/poa.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
<iframe src="forms/Billofsalevehicle.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
<iframe src="forms/IRF.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
<iframe src="forms/InsuranceAffidavit.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
<iframe src="forms/FeesBreakdown.cfm" style="width:400px; height:400px;" frameborder="0"></iframe>
Run Code Online (Sandbox Code Playgroud)

但它们不会全部显示出来。它们都可以工作,但一旦 iframe 超过三个,就不会显示一些错误。我一直在尝试设置一个时间间隔来加载它们,希望它们不会超时,但没有成功。如果我能让它们全部出现,我将尝试让按钮以某种方式循环遍历 iframe 并打印它们。每次我点击刷新时,有些 iframe 可以工作,有些则不能,不断地更改哪些 iframe 可以工作,哪些不能。

尝试设置超时或间隔或其他东西以使它们全部出现:

$("#printall").on("click",function(){
  var iframes = document.getElementsByTagName("iframe");
  var i = 0;
  window.setInterval(function(){
      if(i < iframes.length){
        i++;
      }
  }, 3000);
    });
Run Code Online (Sandbox Code Playgroud)

jta*_*ate 4

这在 Chrome 64 中适用于我:

function PrintAll() {
  var pages =  ["forms/82040PDFCreator.cfm", "forms/poa.cfm", "forms/Billofsalevehicle.cfm"];

  var printNext = function(i) {
    i = i || 0;
    if (i >= pages.length) {
      return;
    }

    var wdw = window.open(pages[i], 'print');
    wdw.onload = function() {
      wdw.print();

      wdw.close();
      setTimeout(function() { 
        printNext(++i);
      }, 100);

    }
  };

  printNext();
}
Run Code Online (Sandbox Code Playgroud)

调用setTimeout只是为了确保窗口在打印下一个窗口之前关闭。没有它,我就会出现一些奇怪的行为。