DELPHI 直接打印为何打印栏过宽如何解决?
时间:2011-09-07
来源:互联网
各位大佬:
小弟是新手,做一个简单的类似超市收银条打印,打印机是EPSON220的,系统是XP,发现每一行的商品明细栏过宽(相当于一倍),而最后的总结栏却是正常,如
单号
打印时间
商品名称 金额 数量 单价
---------------------------- 以上正常
水果 10 1 10
--------------------------
饮料 1 1 1
---------------------------- 以上每栏过宽,几乎可以打印二个品种
应收金额
实收金额
找零
------------------------------以上总计栏正常
程序如下:
procedure TForm5.xpdy;
var
F:TextFile;
i1:integer;
s1,mc1,bz1:string;
dj1,SU,je1:STRING;
begin
try
AssignFile(F,'LPT1');
Rewrite(F);
//打印标题
Writeln(F,chr($1b) + chr($40)); //[初始化打印机
Writeln(F,Chr($1b) + Chr($72) + '1'); //设置红色打印
Writeln(F,chr($1b) + chr($61) + '1'); //居中打印
Writeln(F,chr($1c) + chr($21) + '4'); //倍宽打印
adotable1.Open;
adotable1.First;
s1:=trim(edit1.text);
Writeln(F,chr($1b) + chr($61) + '0'); //取消居中打印
Writeln(F, '单号:' + s1); //显示帐单号
Writeln(F,chr($1c) + chr($21) + '0');
Writeln(F,'打印时间:' + datetimetostr(Now));
Writeln(F,'----------------------------------------');
Writeln(F,' 商品名称 /数量/单价/金额/备注');
writeln(F, CHAR(27)+CHAR(48));
for i1:=0 to adotable1.RecordCount-1 do
begin
mc1:=adotable1.fieldbyname('spmc').AsString;
SU:=floattostr(adotable1.fieldbyname('sl').asfloat);
dj1:=floattostr(adotable1.fieldbyname('dj').AsFloat);
je1:=floattostr(adotable1.fieldbyname('je').asfloat);
bz1:=adotable1.fieldbyname('bz').AsString;
// Writeln(F,'----------------------------------------');
WriteLn(F,''+ MC1+'/ '+su+' /'+dj1+' /'+je1+'/ '+bz1);
adotable1.Next;
end;
//打印尾标
Writeln(F,'----------------------------------------');
writeln(F,' 应收金额:' + trim(edit2.text) + '元');
writeln(F,' 实收金额:' + trim(edit3.text) +'元' );
writeln(F,' 找 零:' + trim(edit4.text)+ '元');
//打印完毕,切纸
Writeln(F,chr($1d)+ 'V' + chr(66) + chr(0)); //切纸
finally
closefile(F)
end;
请各位高手指教,万分感谢
小弟是新手,做一个简单的类似超市收银条打印,打印机是EPSON220的,系统是XP,发现每一行的商品明细栏过宽(相当于一倍),而最后的总结栏却是正常,如
单号
打印时间
商品名称 金额 数量 单价
---------------------------- 以上正常
水果 10 1 10
--------------------------
饮料 1 1 1
---------------------------- 以上每栏过宽,几乎可以打印二个品种
应收金额
实收金额
找零
------------------------------以上总计栏正常
程序如下:
procedure TForm5.xpdy;
var
F:TextFile;
i1:integer;
s1,mc1,bz1:string;
dj1,SU,je1:STRING;
begin
try
AssignFile(F,'LPT1');
Rewrite(F);
//打印标题
Writeln(F,chr($1b) + chr($40)); //[初始化打印机
Writeln(F,Chr($1b) + Chr($72) + '1'); //设置红色打印
Writeln(F,chr($1b) + chr($61) + '1'); //居中打印
Writeln(F,chr($1c) + chr($21) + '4'); //倍宽打印
adotable1.Open;
adotable1.First;
s1:=trim(edit1.text);
Writeln(F,chr($1b) + chr($61) + '0'); //取消居中打印
Writeln(F, '单号:' + s1); //显示帐单号
Writeln(F,chr($1c) + chr($21) + '0');
Writeln(F,'打印时间:' + datetimetostr(Now));
Writeln(F,'----------------------------------------');
Writeln(F,' 商品名称 /数量/单价/金额/备注');
writeln(F, CHAR(27)+CHAR(48));
for i1:=0 to adotable1.RecordCount-1 do
begin
mc1:=adotable1.fieldbyname('spmc').AsString;
SU:=floattostr(adotable1.fieldbyname('sl').asfloat);
dj1:=floattostr(adotable1.fieldbyname('dj').AsFloat);
je1:=floattostr(adotable1.fieldbyname('je').asfloat);
bz1:=adotable1.fieldbyname('bz').AsString;
// Writeln(F,'----------------------------------------');
WriteLn(F,''+ MC1+'/ '+su+' /'+dj1+' /'+je1+'/ '+bz1);
adotable1.Next;
end;
//打印尾标
Writeln(F,'----------------------------------------');
writeln(F,' 应收金额:' + trim(edit2.text) + '元');
writeln(F,' 实收金额:' + trim(edit3.text) +'元' );
writeln(F,' 找 零:' + trim(edit4.text)+ '元');
//打印完毕,切纸
Writeln(F,chr($1d)+ 'V' + chr(66) + chr(0)); //切纸
finally
closefile(F)
end;
请各位高手指教,万分感谢
作者: sumh88 发布时间: 2011-09-07
我只看到写文件,打印在哪里?
作者: funxu 发布时间: 2011-09-07
另外过宽是什么情况?字体过宽?还是空格太多?还是------------------这个过宽?
作者: funxu 发布时间: 2011-09-07
二行之间的距离(虚线之间)
---------------------------- 以上正常
水果 10 1 10
--------------------------
---------------------------- 以上正常
水果 10 1 10
--------------------------
作者: sumh88 发布时间: 2011-09-07
1 查看下打印代码,换行是怎么处理的
2 WriteLn(F,''+ MC1+'/ '+su+' /'+dj1+' /'+je1+'/ '+bz1);
上面语句中的变量有没有多余的回车换行
作者: funxu 发布时间: 2011-09-07
mc1:=adotable1.fieldbyname('spmc').AsString;
SU:=floattostr(adotable1.fieldbyname('sl').asfloat);
dj1:=floattostr(adotable1.fieldbyname('dj').AsFloat);
je1:=floattostr(adotable1.fieldbyname('je').asfloat);
bz1:=adotable1.fieldbyname('bz').AsString;
这些是否都trim掉前后的空格,或设定成定成长的。
应该设定固定长度为最好。
SU:=floattostr(adotable1.fieldbyname('sl').asfloat);
dj1:=floattostr(adotable1.fieldbyname('dj').AsFloat);
je1:=floattostr(adotable1.fieldbyname('je').asfloat);
bz1:=adotable1.fieldbyname('bz').AsString;
这些是否都trim掉前后的空格,或设定成定成长的。
应该设定固定长度为最好。
作者: babydog01 发布时间: 2011-09-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28