最近编写了一段条码打印程序,大概方法是: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类型的。  但是出现一个问题,在使用激光打印机时条码不能打印出来,而使用喷墨打印机则可以正常显示不知什么原因各位高手指点一下,小弟不胜感激!

解决方案 »

  1.   

    to aiirii(ari-爱的眼睛) 
    是条码更本就没有打印
    我试过两台激光打印(不同型号)机都不行
      

  2.   

    问题已经找出来了好像是因为激光打印机的打印速度太快,而条码还没有来得及输出就已经结束的打印作业,而喷墨打印机的数度要慢的多,所以能正常打印我实在程序里加了一个ShowMessage,等待了一段时间才看出来的有没有什么方法可以在不影响激光打印机的打印速度的前提下克服这种问题?
      

  3.   

    我看还是BarCode组件比较好用呀
      

  4.   

    好象有個
    begindoc, beginprint 之類的, 
    你看看Printer的屬性
      

  5.   

    to aiirii(ari-爱的眼睛) 
    没有找到可以设置緩存的属性
    不知是否可以指点一二
      

  6.   

    不是直接設置的, 你試驗下, 
    應該在delphi中一個的printer中控制printer.begindoc
    ....
    printer.enddoc //執行了這行才開始打印大概是這樣
      

  7.   

    to aiirii(ari-爱的眼睛)
    我就是这样写的代码激光打印机就是打不出来(喷墨的没事)郁闷
    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;
      

  8.   

    这样应该没问题吧?
    字符串都可以,就是条码不行TempBarImage是Barimage类型的变量和Image差不多
      

  9.   

    看不出明顯的問題, 檢查, 改變 strect1, strect2 的大小, 長寬試下,
    可能兩種類型的打印機, 這個東西不同的!!
      

  10.   

    to  aiirii(ari-爱的眼睛) 
    问题解决了毛病不是出在打印的代码上
    应该是我变量用错了
    非常感谢你一直的支持!
      

  11.   

    abufover(abu) :
       我看完了,才知被你玩了