【问题标题】:Print a pdf created with jsPDF in all browsers在所有浏览器中打印使用 jsPDF 创建的 pdf
【发布时间】:2023-08-18 00:54:01
【问题描述】:

所以,我已经动态创建了一个 pdf,现在我想打印它:

var doc = new jsPDF();
var name = "Doe, John"
doc.setFontType("normal");
doc.setFontSize(12);
doc.text(20,20,'Name: '+ name);

//do something that prints the pdf...

那么,我如何获取这个 doc 变量并打印它。我发现的其他任何地方都使用 pdf 的 url。我需要先为其创建一个网址吗?

因此,我目前采用的解决方案是在新选项卡/窗口中显示 pdf,从中可以打印 pdf。

window.open(doc.output('datauristring'));

很遗憾,这只适用于 Chrome。有人知道如何让它在 IE、Firefox、Safari 等中运行吗?

我仍然想知道是否有办法跳过这一步(打开 pdf,然后需要按下另一个按钮)。

【问题讨论】:

  • 您很可能无法直接打印。您必须利用浏览器的打印对话框,即使这样也可能不起作用:将您的文档嵌入为 iframe 或弹出窗口,然后在其上执行 JS 的 print() 函数。但正如我所说,即使这样也是一场冒险游戏:浏览器可能不允许这样做,或者将打印命令解释为与(空)页面而不是嵌入内容有关。我会考虑显示 PDF 或允许下载它(就像 jsPDF 网站一样)并将打印留给用户。
  • 通过浏览器的打印对话框发送它不会有问题,但下载 pdf 是我不惜一切代价试图避免的事情
  • 看看这个答案*.com/q/33900689/2446808 或这个*.com/q/32280613/2446808。自动打开打印对话框似乎确实充满了问题,所以我可能会选择“在框架/弹出窗口中显示并让用户单击打印”选项。
  • 练习的全部目的是让用户点击一个按钮来创建 pdf(如上),然后说 pdf 打印,而无需用户按下任何按钮或下载任何东西来打印它
  • 这很可能永远不会起作用。如果您发现任何浏览器不允许这样做,那么他们应该这样做。网络安全和东西。想想如果可能的话,一个人会写出多么可怕的漏洞,在没有用户交互的情况下从 javascript 激活打印。

标签: javascript pdf jspdf


【解决方案1】:

jsPDF库提供了一个方法autoPrint()。 您可以如下所示使用它

var doc = new jsPDF();
var name = "Doe, John"
doc.setFontType("normal");
doc.setFontSize(12);
doc.text(20,20,'Name: '+ name);
doc.autoPrint();
//This is a key for printing
doc.output('dataurlnewwindow');

【讨论】:

    【解决方案2】:

    试试这个:

    window.open(doc.output('bloburl'), '_blank');
    

    这有时会导致 adblock 出现问题。

    【讨论】:

      【解决方案3】:

      因此,总而言之,对于 Chrome 和 Safari,请使用

      window.open(doc.output('datauristring'));
      

      但对于 IE 和 Firefox,使用

      doc.save();
      

      这些都允许您在新窗口中打开 pdf 文件,从中可以打印。对于那些花时间弄清楚其他浏览器需要什么的人,请随时在此处添加您的研究...

      【讨论】:

        【解决方案4】:

        你只需要添加这个

        doc.save('Test.pdf');

        (我想您已经在按钮触发器中包含了所有上述编写的代码,用户单击该触发器以获取 pdf)

        【讨论】:

          最近更新 更多