代码之家  ›  专栏  ›  技术社区  ›  David Brierton

打印按钮打印多页

  •  4
  • David Brierton  · 技术社区  · 7 年前

    我试图有一个打印按钮,将打印多个PDF或文件时,点击。

    是否可以有“全部打印”按钮:

    <button class="btn-u btn-u-orange" name="printall" id="printall" ><i class="icon-printer"></i> Print All</button>
    

    但当点击时,它会打印所有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();
        });
    

    当我选择打印时,只会弹出第一个要打印的pdf文件,而不会弹出其他文件。在此方面的任何帮助都将不胜感激。

    添加了coldfusion标签,因为我正在呼叫。正在填充PDF的CFM。

    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>
    

    但它们不会全部显示出来。它们都能工作,但一旦有三个以上的iFrame,就不会全部显示出一些错误。我一直在尝试设置加载间隔,希望它们不会超时,但没有成功。如果我能让它们全部出现,我会尝试让按钮在iframes中循环并打印它们。每次我点击refresh时,有些iFrame可以工作,有些不可以,不断地改变哪些可以,哪些不可以。

    正在尝试设置超时或间隔或其他设置,以使它们全部显示:

    $("#printall").on("click",function(){
      var iframes = document.getElementsByTagName("iframe");
      var i = 0;
      window.setInterval(function(){
          if(i < iframes.length){
            i++;
          }
      }, 3000);
        });
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   jtate    7 年前

    这在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();
    }
    

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

        2
  •  1
  •   Milan Chheda guest271314    7 年前

    作为一种选择,我建议您使用 iframe .

    内部 iframe ,您会不断添加内容并逐个打印。下面是可以在每个页面的循环内调用的函数。将页面中的内容附加到此 iframe 然后继续打印。最后,我们将删除 iframe 使用 setTimeout . 您可以增加/减少时间以适应您的需要和速度:

    function PrintAll() {
          var pages = ["forms/82040PDFCreator.cfm", "forms/poa.cfm", "forms/Billofsalevehicle.cfm"];
          for (var i = 0; i < pages.length; i++) {
            $('<iframe>', {
                name: 'myiframe',
                class: 'printFrame'
              })
              .appendTo('body');
            $('.printFrame').load(pages[i], function(response, status, xhr) {
              window.frames['myiframe'].focus();
              window.frames['myiframe'].print();
    
              //above two lines can be merged as:
              //window.frames['myiframe'].focus().print();
    
              setTimeout(() => {
                $(".printFrame").remove();
              }, 1000);
            });
          }
        }