最近编写了一段条码打印程序,大概方法是:1.使用BarImage控件获得一个条码的图像;
TempBI.Code:='1234567';2.将得到的条码图像旋转90度;
TempBarImage:=TBarImage.Create(nil);
TempBarImage.Picture.Bitmap.Height:=PrintCT.TempBI.Picture.Width;
TempBarImage.Picture.Bitmap.Width:=PrintCT.TempBI.Picture.Height;
try
for i:=0 to PrintCT.TempBI.Height do
for j:=0 to PrintCT.TempBI.Width do
TempBarImage.Canvas.Pixels[i,j]:=PrintCT.TempBI.Canvas.Pixels[j,i];
except
ShowMessage('tempbarimage err');
Exit;
end;
3.直接使用Printer.Canvas.stretchdraw输出到打印机。
with strect1 do
begin
left:=XXXX;
top:=XXXX;
right:=XXXX;
bottom:=XXXX; //XXXX为已integer数字
end;
Printer.Canvas.stretchdraw(strect1,TempBarImage.Picture.Graphic);注:其中TempBarImage、TempBI都是TBarImage类型的。 但是出现一个问题,在使用激光打印机时条码不能打印出来,而使用喷墨打印机则可以正常显示不知什么原因各位高手指点一下,小弟不胜感激!
TempBI.Code:='1234567';2.将得到的条码图像旋转90度;
TempBarImage:=TBarImage.Create(nil);
TempBarImage.Picture.Bitmap.Height:=PrintCT.TempBI.Picture.Width;
TempBarImage.Picture.Bitmap.Width:=PrintCT.TempBI.Picture.Height;
try
for i:=0 to PrintCT.TempBI.Height do
for j:=0 to PrintCT.TempBI.Width do
TempBarImage.Canvas.Pixels[i,j]:=PrintCT.TempBI.Canvas.Pixels[j,i];
except
ShowMessage('tempbarimage err');
Exit;
end;
3.直接使用Printer.Canvas.stretchdraw输出到打印机。
with strect1 do
begin
left:=XXXX;
top:=XXXX;
right:=XXXX;
bottom:=XXXX; //XXXX为已integer数字
end;
Printer.Canvas.stretchdraw(strect1,TempBarImage.Picture.Graphic);注:其中TempBarImage、TempBI都是TBarImage类型的。 但是出现一个问题,在使用激光打印机时条码不能打印出来,而使用喷墨打印机则可以正常显示不知什么原因各位高手指点一下,小弟不胜感激!
是条码更本就没有打印
我试过两台激光打印(不同型号)机都不行
begindoc, beginprint 之類的,
你看看Printer的屬性
没有找到可以设置緩存的属性
不知是否可以指点一二
應該在delphi中一個的printer中控制printer.begindoc
....
printer.enddoc //執行了這行才開始打印大概是這樣
我就是这样写的代码激光打印机就是打不出来(喷墨的没事)郁闷
if PrintCT.FlagCL then
begin
Printer.PrinterIndex:=PrintCT.PrintIndex1;
TempBarImage:=TBarImage.Create(nil);
TempBarImage.Picture.Bitmap.Height:=PrintCT.TempBI.Width;
TempBarImage.Picture.Bitmap.Width:=PrintCT.TempBI.Height;
try
for i:=0 to PrintCT.TempBI.Height do
for j:=0 to PrintCT.TempBI.Width do
TempBarImage.Canvas.Pixels[i,j]:=PrintCT.TempBI.Canvas.Pixels[j,i];
except
ShowMessage('tempbarimage err');
Exit;
end;
temhi:=2100;
temwd:=450;
with strect1 do
begin
left:=bleft;
top:=btop;
right:=left+temwd;
bottom:=top+temhi;
end;
with strect2 do
begin
left:=bleft;
top:=btop+2673;
right:=left+temwd;
bottom:=top+temhi;
end;
Printer.BeginDoc;
Printer.Canvas.Font.Name:='黑体';
Printer.Canvas.Font.Size:=PrintCT.FontSize0;
Printer.Canvas.stretchdraw(strect1,TempBarImage.Picture.Graphic);
Printer.Canvas.stretchdraw(strect2,TempBarImage.Picture.Graphic);
if Length(PrintCT.Item)<20 then begin
Printer.Canvas.TextOut(cleft,ctop,PrintCT.Item);
Printer.Canvas.TextOut(cleft,ctop+2720,PrintCT.Item);
end else
begin
Printer.Canvas.TextOut(cleft,ctop,copy(PrintCT.Item,1,20));
Printer.Canvas.TextOut(cleft,ctop+200,copy(PrintCT.Item,21,length(PrintCT.Item)-20));
Printer.Canvas.TextOut(cleft,ctop+2720,copy(PrintCT.Item,1,20));
Printer.Canvas.TextOut(cleft,ctop+2920,copy(PrintCT.Item,21,length(PrintCT.Item)-20));
end;
Printer.Canvas.TextOut(cleft,ctop+710,PrintCT.Serialnum);
Printer.Canvas.TextOut(cleft+1180,ctop+710,PrintCT.Ordno);
Printer.Canvas.TextOut(cleft+940,ctop+710,PrintCT.Inex);
Printer.Canvas.TextOut(cleft+2120,ctop+710,PrintCT.Lotym);
Printer.Canvas.TextOut(cleft,ctop+3440,PrintCT.Serialnum);
Printer.Canvas.TextOut(cleft+1180,ctop+3440,PrintCT.Ordno);
Printer.Canvas.TextOut(cleft+940,ctop+3440,PrintCT.Inex);
Printer.Canvas.TextOut(cleft+2120,ctop+3440,PrintCT.Lotym);
//ShowMessage('wait...');
Printer.EndDoc;
end;
字符串都可以,就是条码不行TempBarImage是Barimage类型的变量和Image差不多
可能兩種類型的打印機, 這個東西不同的!!
问题解决了毛病不是出在打印的代码上
应该是我变量用错了
非常感谢你一直的支持!
我看完了,才知被你玩了