java通过servlet返回的页面实现批量打印
实现的原理为: 给div标签加上STYLE="page-break-before:always"样式实现分页。页面加载完成后用js调用打印
package com.fehorizon.erp.pda.utils;
import java.io.OutputStreamWriter;
import javax.servlet.ServletOutputStream;
import com.bokesoft.myerp.common.rowset.BKRowSet;
import com.fehorizon.erp.pda.base.BaseService;
public class BatchpltServiceImpl extends BaseService {
public void batchplt() {
init(false);
try {
String cond = strRequiredParam("cond", "条件");
int type = intRequiredParam("type", "类型", false);
BKRowSet rs = null;
String barcode="-1";
String desc="标签错误";
if(type == 1) {
rs = ctx.getResultSet("select billdtlid barcode,sp_bin codeDesc from CP_HX00_Warehouse_StPosition where billdtlid in ("+cond+")");
}else if(type == 2){
rs = ctx.getResultSet("select (select name from CP_HX00_SparePartHead where id = goodsid) codeDesc, sn barcode from stockin where seqid in ("+cond+")");
}else {
rs = ctx.getResultSet("select (select name from CP_HX00_SparePartHead where id = goodsid) codeDesc, sn barcode from posn where seqid in ("+cond+")");
}
if(!rs.bkFirst())return;
response.setContentType("text/html; charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(out,"UTF-8");
ow.write("<html>");
ow.write("<head>");
ow.write("<meta charset=\"utf-8\">");
ow.write("<meta content=\"text/html; charset=utf-8\" />");
ow.write("<title>批量打印</title>");
ow.write("<script>window.οnlοad=window.print();</script>");
ow.write("<head>");
ow.write("<body style=\"zoom:0.85;padding:0;margin:0\">");
String url = request.getRequestURL().toString().replace("batchplt","barCodeGenera");
rs.bkBeforeFirst();
while(rs.bkNext()) {
barcode = rs.bkGetString("barcode");
desc = rs.bkGetString("codeDesc");
ow.write("<DIV STYLE=\"page-break-before:always\"><img src=\""+url+"?barcode="+barcode+"&desc="+desc+"\"/></DIV>");
}
ow.write("</body>");
ow.write("</html>");
ow.flush();
ow.close();
} catch (Throwable e) {
e.printStackTrace();
}
}
}