近来的ERP系统中再打印调拨单时候,epson lq 680k连续打印出现空白页问题?
原来用的win98时,就没有出现什么问题?但是现在都是winxp操作系统了,就出现问题了!具体情况是:
    我先在打印机服务器属性中定义了格式:
    格式名称:123
    详细数据:宽度:21.5CM 高度:11.5CM
    然后把Epson LQ-680 ESC/P 2属性--->设备属性:
    手工进纸:123
    送纸器--纸盒1:123
    送纸器--纸盒2:123
    滚动进纸器:123    在利用ERP系统打印时,我按自定义:210*115的格式,进行打印,但是如果超过2页,就打印3页,中间出现空白页。注意:
    现在已经不是epson lq 680k的驱动的问题了,我已经安装了epson lq 680k for xp的驱动。    现在这个问题,让我思考了一周了,确实是没有思路。请高手帮助!谢谢!

解决方案 »

  1.   

    是纸张的高度,无论怎么搞,都是297mm的高度。我想应该是自定义的格式没有起作用,还是按A4的格式打印的,不然不会是中间空一页。
      

  2.   

    连续打印,垂直方向打印不准确的问题,本人上个月已经解决了,用绕过驱动(如果调用驱动就相当于多了一层数据处理,有时就不可靠了),直接向打印机发送命令的方式写的.下面是核心代码,
    源程序可以去http://download.csdn.net/source/2019243 下载下面这些指令都是参考了爱普生官方网站上的打印机编程指南,主要是
    设定绝对水平打印位置, 设定相对水平打印位置, 顺方向(向下)走纸3个命令.
         需要说明的是,垂直方向为了精确打印,本人也考虑过半行半行打印.但发现如果这样,打印了上百张纸后,位置精确就不能保障,因此最终本人还是采用一行一行打印的.////连接打印机端口
      Try
        //printport为电脑的打印端口,为lpt1,lpt2…
        AssignFile(F,unit7.printPort);
        Rewrite(F);
      except on e:exception do
      begin
         showmessage('连接'+unit7.printPort+'打印端口失败,可能你的电脑没有'+unit7.printPort+'端口,'+
         '如果是上述情况,可以在 打印管理--打印端口设置 界面中修改打印机端口'+e.Message);
         form1.button1.Enabled:=true;
         exit;
      end;////打印第一页第一行之前,打印机向下走纸距离,一个单位为1/180英寸(2.54厘米)
    //itemp为走纸距离,由于一次走纸不能超过255,所以需要一个for循环,为多次走纸考虑.
    for i:=1 to (itemp div 255) do
    begin
        //向下走纸255个单位
        Write(f,chr(27)+chr(74)+chr(255));
    end;
    Write(f,chr(27)+chr(74)+chr(itemp mod 255));////将打印机指针,移动到水平绝对位置8.9cm处(即接下去从8.9cm处开始打印了)
    //这里一个单位是1/6英寸(2.54厘米)
      itemp:=round(8.9/2.54*60);
      itemp2:=0;
      //由于不能超过255,所以要做以下处理
      if(itemp>255) then
      begin
        itemp2:=itemp div 256;
        itemp:=itemp mod 256;
      end;
      //移到itemp*256+itemp2处
      Write(f,chr(27)+chr(36)+chr(itemp)+chr(itemp2));////打印收款人姓名
      custName:=ADOQuery1.FieldByName('custName').AsString;
      //打印26个空格后再打印收款人姓名
      writeln(f,space(26)+custName);
    space函数为自己写的,代码如下
    function space(count:integer):string;
    var
      str:string;
      i:integer;
    begin
      str:='';
      for i:=1 to count do
      begin
        str:=str+' ';
      end;
      result:=str;
    end;////打印带间距的字符串,打印的效果如”s   t   r   I   n   g”的样子
    procedure writeWideString(strdata:string;int:integer;var f:textfile);
    var
      i:integer;
      len:integer;
    begin
      len:=length(strdata);
      for i:=1 to len do
      begin
        write(f,midbstr(strdata,i,1));
        if (i<>len) then
    begin
      //水平走纸(或说移动到相对水平位置)int个单位
      //一个单位是1/180英寸
          Write(f,chr(27)+chr(92)+chr(int)+chr(00));
        end;
      end;
    end;
    ////打印半行,最终考虑到垂直方向位置准确度,没有采用.如果你仅仅连续打印几十张,建议采用
    procedure writeHalfLn(var f:textfile);
    begin
      //一行尾1/6英寸,一个单位1/180英寸,一行为30个单位,因此半行为15个单位.
    Write(f,chr(27)+chr(74)+chr(15));
    end;
      

  3.   

    程序已经更新了,还是去我的资源 http://sprbreeze.download.csdn.net/ 中看吧,这样能看到所有版本