NW.js中win.print()打印/生成PDF时票据分页截断问题求助
解决NW.js票据打印/PDF生成时内容被分页截断的问题
1. 修复配置参数中的拼写错误
你的打印配置里存在多处拼写错误,会导致边距、缩放设置失效,直接引发布局异常:
marginBtottom→marginBottommarginleft→marginLeftscalFactor→scaleFactor
修正后的核心配置示例:
win.print({ autoprint: true, headerFooterEnabled: false, // 建议关闭页眉页脚,避免占用页面有效空间 landscape: false, shouldPrintBackgrounds: true, pdf_path: 'C:/Users/STAR VISION_COM/Documents/out.pdf', scaleFactor: 100, marginCustom: { "marginBottom": 30, "marginTop": 20, "marginLeft": 20, "marginRight": 20 }, })
2. 用CSS强制控制分页行为
给票据的核心容器添加CSS规则,禁止内容被意外截断:
.ticket-container { page-break-inside: avoid; /* 阻止容器内的内容被分页拆分 */ width: 100%; max-height: calc(100vh - 50px); /* 限制容器高度为页面可用高度,减去上下边距 */ box-sizing: border-box; } /* 如需强制分页,可在需要拆分的位置添加此类 */ .page-break { page-break-after: always; }
3. 确保DOM渲染完成后再执行打印
隐藏按钮和模态框后,DOM需要时间更新布局,直接调用打印会导致布局计算错误,添加短延迟:
print(printer) { document.querySelector('.btn').style.display="none"; document.querySelector('.modal').style.display="none"; var win = nw.Window.get(); let pdfName = this.tickets[0].file; // 优化文件名处理,直接替换空格为下划线 let pdfname = pdfName.replace(/\s+/g, '_'); // 延迟100ms确保DOM渲染完成 setTimeout(() => { const printOptions = { autoprint: true, headerFooterEnabled: false, landscape: false, shouldPrintBackgrounds: true, scaleFactor: 100, marginCustom: { "marginBottom": 30, "marginTop": 20, "marginLeft": 20, "marginRight": 20 } }; if (printer == 'pdf') { win.print({ ...printOptions, pdf_path: `C:/Users/STAR VISION_COM/Documents/${pdfname}.pdf` }) } else { win.print({ ...printOptions, printer: printer }) } this.goBack(); }, 100); }
4. 指定固定纸张尺寸适配票据
如果票据是固定尺寸(如自定义小票、A5),直接指定paperSize参数,确保内容完全适配页面:
win.print({ // 其他参数... paperSize: { format: 'A5', // 也可自定义宽高,比如width: '100mm', height: '150mm' margin: { top: 20, bottom: 30, left: 20, right: 20 } } })
内容的提问来源于stack exchange,提问作者Vebama Wanematou
相关产品推荐
相关产品推荐

