【问题标题】:Print button printing multiple pages打印按钮打印多页
【发布时间】:2018-07-04 02:02:25
【问题描述】:

我正在尝试使用一个打印按钮,单击该按钮将打印多个 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的.cfms。

我尝试过的是创建 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 超过三个,它们就不会全部显示一些错误。我一直在尝试设置一个时间间隔来加载它们,希望它们不会超时但没有成功。如果我能让它们全部出现,我将尝试让按钮以某种方式循环浏览 iframe 并打印它们。每次我点击刷新时,一些 iframe 工作一些不工作,不断改变哪些工作,哪些不工作。

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

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

【问题讨论】:

标签: javascript jquery coldfusion


【解决方案1】:

作为一个选项,我建议您使用iframe

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

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);
        });
      }
    }

【讨论】:

  • 我应该在哪里添加我的页面?
  • 您可以将我函数中的所有代码放入您的for 循环中。您只需将YOUR_CONTENT_GOES_HERE 替换为您的页面内容即可。
  • 内容?对不起,我对这一切都很陌生。你指的是什么内容?
  • 我已经用你的函数更新了代码。尝试使用它。
  • 点击按钮时,三个 iframe 框会出现并快速消失,其中没有任何内容。但没有其他事情发生
【解决方案2】:

这在 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 的调用只是为了确保在打印下一个窗口之前关闭窗口。没有它,我会出现一些奇怪的行为。

【讨论】:

  • 嗯,在我在 chrome 上的第一个 pdf 之后,它仍然停止
  • @DavidBrierton 您的站点是如何配置的? IIS、Apache、节点还是其他?因为当从我的文件系统上的本地 html 文件在 Chrome 中运行它时,它不起作用,但是当我在 IIS 中实际设置一个站点来托管它时,它确实起作用。
  • 它是 Internet 上的托管站点。后端是coldfusion
  • 我会给你这个网站,但你必须填写一百万张表格才能进入它无法正常工作的页面
  • @DavidBrierton 啊我想我知道这个问题。试试我编辑的答案。
猜你喜欢
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
相关资源
最近更新 更多