近来的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的驱动。 现在这个问题,让我思考了一周了,确实是没有思路。请高手帮助!谢谢!
原来用的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的驱动。 现在这个问题,让我思考了一周了,确实是没有思路。请高手帮助!谢谢!
源程序可以去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;