js构建表单使用window.print()分页批量打印

定义要打印的视图容器id='printDetailDiv'

首先,添加要展示的标签和一个容器body,我这里body用来展示表格

<label class="form-label custom-col">收货单位:</label>
            <label class="form-label custom-col" id="id_customer"></label>
            <label class="form-label custom-rcol" id="id_loadDate"></label>
<label class="form-label custom-rcol">装货日期:</label>
<tbody id="id_body">
</tbody>

拼接要渲染的html

var printHtml = "";
//  打印的每页的数据
for (i = 0; i < selectList.length; i++) {
                    $("#id_customer").text(selectList[i].customer);
                    $("#id_loadDate").text(this.dateFormat(selectList[i].loadDate));
                    ...
                    var body = document.getElementById("id_body")
                    body.innerHTML = "";  // 重置body内容
                    //  每页中表格的数据
                    for (j = 0; j < selectList[i].productList.length+1; j++) {
                            var tr = document.createElement("tr");
                            var td1 = document.createElement("td");
                            td1.innerHTML = "<p>" + '&nbsp;' + selectList[i].productList[j].productName + "</p>"
                            var td2 = document.createElement("td");
                            td2.innerHTML = "<p>" + '&nbsp;' + selectList[i].productList[j].type + "</p>"
                            ...
                            tr.appendChild(td1);
                            tr.appendChild(td2);
                            ...
                            body.appendChild(tr);
                    }
                    printHtml = printHtml + $("#printDetailDiv").prop("outerHTML");
                    printHtml = printHtml + "<div id='page1' style='height:300px;page-break-after:always'></div>";
                }

渲染到页面后,即可通过window.print()方法使用浏览器的打印功能,page-break-after:always属性是重要的用来始终进行分页行为。

    window.document.body.innerHTML = printHtml;
                setTimeout(function(){
                    window.print();
                }, 500);

至此,打印后selectList.length是多少就分为多少页了。

JSP和JavaScript中,`window.print()`是一个用于直接调用浏览器默认的打印功能的函数。当你在网页上点击这个功能,浏览器会打开一个新的隐藏窗口,并准备页面内容进行打印。 由于它的执行是在浏览器环境中,JSP本身作为服务器端语言无法直接获取到打印过程中产生的实时信息。但是,你可以通过以下几种间接的方式来监控或影响打印过程: 1. **事件监听**: JavaScript中可以给`window.onbeforeprint` 和 `window.onafterprint` 添加事件处理器,这两个事件分别在开始打印前和打印结束后触发。在事件处理程序中,你可以做些预览操作或者收集一些数据供后续处理。 ```javascript window.addEventListener("beforeprint", function(e) { // 在这里添加你的打印前准备工作 }); window.addEventListener("afterprint", function(e) { // 打印完成后的工作 }); ``` 2. **AJAX回调**: 如果你需要在用户完成打印后获取某些反馈,可以在页面上设置一个表单提交或者其他 AJAX 请求,然后在打印完成后手动触发它。 3. **全局变量或回调函数**: 你可以在开始打印设置一个全局变量或者传递一个回调函数,在打印完成后由用户手动调用,以获取一些定制化的打印结果。 不过需要注意的是,获取打印过程的具体详细信息通常不是标准的实践,因为这可能会干扰用户的正常打印体验。大部分情况下,上述方法是为了提供一些辅助功能,而非直接跟踪打印细节。如果你需要更复杂的行为控制,可能要考虑其他替代方案,比如生成PDF文件供用户下载自行打印
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值