需求:物流系统,对入出库单要进行批量打印,比如有序号为01,02,03,04这四张单据,批量打印的时候,需要按顺序01->02->03->04将单据打印出来。
现有实现方法:
将需要打印的单据的数据全部封装在一个ds内,利用iframe引入,并调用打印程序,打印出这张单据。循环调用这个方法,实现批量打印。
具体代码如下:
function print(dsArray) {
  var path=window.prefix + print.html;
  var i=0;
  while(i < dsArray.length) {
    ds = dsArray[i];
    div=window.document.createElement("<div style='position:absolute;top:-500;left:-500'>");
    window.document.appendChild(div);
    div.innerHTML="<iframe  src=\""+path+"\" width=\"100\" height=\"100\" scrolling=\"no\">";
    i++;
  }
}
注:print.html的作用就是把ds中的内容打印出来。可是现在打印出来的效果却是随机的,可能是:04,02,01,03 也可能是 02,03,04,01。
希望大虾帮忙小弟,多谢!

解决方案 »

  1.   

    因为iframe加载延迟造成的
    window.pageIndex = 0;
    window.dsArray = "要打印的数据";function print() { 
        if(pageIndex >= dsArray.length){
            dsArray = null;
            return;
        }
        var path=window.prefix + print.html; 
        ds = dsArray[pageIndex]; 
        div=window.document.createElement(" <div style='position:absolute;top:-500;left:-500'>"); 
        window.document.appendChild(div); 
        div.innerHTML=" <iframe  src=\""+path+"\" width=\"100\" height=\"100\" scrolling=\"no\">"; 

    在print.html中,打印完成后给页的编码加1, 再调用print函数window.onload = function(){
        window.print();
        parent.window.pageIndex++;
        parent.window.print();
    }