+ -
当前位置:首页 → 问答吧 → DELPHI 直接打印为何打印栏过宽如何解决?

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;
请各位高手指教,万分感谢

作者: sumh88   发布时间: 2011-09-07

我只看到写文件,打印在哪里?

作者: funxu   发布时间: 2011-09-07

另外过宽是什么情况?字体过宽?还是空格太多?还是------------------这个过宽?

作者: funxu   发布时间: 2011-09-07

二行之间的距离(虚线之间)
---------------------------- 以上正常
水果 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掉前后的空格,或设定成定成长的。

应该设定固定长度为最好。

作者: babydog01   发布时间: 2011-09-07

热门下载

更多