You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NW.js中win.print()打印/生成PDF时票据分页截断问题求助

解决NW.js票据打印/PDF生成时内容被分页截断的问题

1. 修复配置参数中的拼写错误

你的打印配置里存在多处拼写错误,会导致边距、缩放设置失效,直接引发布局异常:

  • marginBtottom → marginBottom
  • marginleft → marginLeft
  • scalFactor → 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:10:56