在所有浏览器中打印使用jsPDF创建的pdf文件

9

我动态创建了一个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。我需要先为它创建一个url吗?
因此,我目前采用的解决方案是在新标签页/窗口中显示pdf,从中可以打印pdf。
window.open(doc.output('datauristring'));

很遗憾,这只在Chrome中有效。有人知道如何在IE、Firefox、Safari等其他浏览器中使其工作吗?

我仍然想知道是否有一种方法可以跳过这一步骤(打开PDF文件,然后需要按下另一个按钮)。


2
你很可能无法直接打印它。你需要利用浏览器的打印对话框,但即使这样也可能行不通:将你的文档嵌入一个iframe或弹出窗口,然后在其上执行JS的“print()”函数。但正如我所说,即使这样也是一场冒险游戏:浏览器可能不允许它,或者将打印命令解释为与嵌入内容无关的(空)页面。我建议考虑展示PDF或允许下载它(就像jsPDF网站所做的那样),并将打印留给用户自己决定。 - Antares42
1
看看这个答案https://dev59.com/hpHea4cB1Zd3GeqPo2ua或者这个https://dev59.com/SY7ea4cB1Zd3GeqPC5TG。自动打开打印对话框似乎存在很多问题,所以我可能会选择“在框架/弹出窗口中显示并让用户点击打印”的选项。 - Antares42
整个练习的目的是让用户点击一个按钮,使PDF文件被创建(如上所述),然后让该PDF文件打印,而无需用户再按任何按钮或下载任何内容来打印它。 - Charles
1
这很可能永远不会起作用。如果你找到任何一个不会禁止它的浏览器,那么他们应该禁止它。网络安全等等。想想如果可能的话,人们可以编写多可怕的漏洞来激活JavaScript打印而无需用户交互。 - Antares42
1
除非有很少的例外,如果您可以通过按钮触发函数来完成某项操作,那么您可以直接从脚本中完成它,而无需用户交互。这意味着,一旦打开网站,您就可以编写一个在默认打印机上打印一千个黑色页面的网站。这不好。例如,没有现代浏览器允许您通过JS“远程控制”文件上传对话框。这就是为什么像https://blueimp.github.io/jQuery-File-Upload/index.html这样的小部件需要使用不可见的浮动div等技巧。 - Antares42
显示剩余2条评论
5个回答

16

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

9

试试这个:

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

有时候这可能会与广告拦截软件产生问题。


传说,在最新的MacOS Chrome上,这是唯一有效的方法。 - undefined

5
所以,总结一下,对于Chrome和Safari,请使用:
window.open(doc.output('datauristring'));

但是对于IE和Firefox,使用以下代码:

doc.save();

这两个选项都允许您在新窗口中打开PDF文件,然后可以进行打印。对于那些已经花费时间弄清楚其他浏览器所需条件的人,请随意在此处添加您的研究...


2

您只需添加以下内容:

doc.save('Test.pdf');

(我假设您已经将所有上述代码编写在用户单击以获取pdf的按钮触发器内)


0

你最好从npm中实现“printjs”,将jspdf文档转换为blob,并像这样打印它

 const data = PDF.output('blob')
 const blobUrl = URL.createObjectURL(data);
 printJS(blobUrl);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接