如何使用pdfMake一次打印多份文档?
解决pdfMake一次打印多份文档的问题
问题说明
使用pdfMake打印单份文档正常,但需要实现一次打印多份的功能,官方文档及网络未找到明确方案,自行尝试将文档内容数组化(如var dd = [d, d])后打印,结果为空白页。
现有代码
function() { // 生成文档内容d,已验证内容正确 const win = window.open('', "tempWinForPdf"); pdfMake.createPdf(d).print({}, win); setTimeout(() => { win.close(); }, this.printTime); }
注:printTime为控制临时窗口关闭延迟的毫秒数
可行解决方案
方案一:串行调用打印方法(利用回调)
pdfMake的print方法支持第三个参数作为打印完成的回调,通过串行调用实现多份打印:
function printMultipleCopies(docConfig, copyCount) { const win = window.open('', "tempWinForPdf"); let printedCopies = 0; function printNext() { if (printedCopies < copyCount) { pdfMake.createPdf(docConfig).print({}, win, () => { printedCopies++; printNext(); }); } else { setTimeout(() => { win.close(); }, this.printTime); } } printNext(); } // 调用示例:打印3份目标文档 printMultipleCopies(d, 3);
方案二:合并多份内容为单个PDF
将目标文档的内容复制多份,合并到同一个文档配置中,生成包含多份内容的PDF后一次性打印:
// 生成包含3份内容的文档配置 const multiCopyDoc = { ...d, content: Array.from({ length: 3 }, () => [...d.content]).flat() }; const win = window.open('', "tempWinForPdf"); pdfMake.createPdf(multiCopyDoc).print({}, win); setTimeout(() => { win.close(); }, this.printTime);
数组化尝试失败原因
pdfMake的createPdf方法仅接受单个文档配置对象作为参数,直接传入文档配置数组会导致解析失败,最终输出空白页。
内容的提问来源于stack exchange,提问作者Cram245
相关产品推荐
相关产品推荐

