公司现在有一个程序,是用delphi开发的,程序从SQL数据库中取出数据后(姓名、工号),现在我想要通过条码打印机打出职工的卡片,工号打出来要求是条形码,用EAN128的码制。现在公司里条码打印机已经有了,是ZEBRA的300dpi机器。 
就想请问各位大侠我们delphi程序中改如何调用斑马的ZPL指令来打印出职工卡那,而且最好还需要个打印预览的窗口啊 请各位大侠给我指点下这个难题吧  虽然分数不多  我会追加的

解决方案 »

  1.   

    delphi带的RAVE和Fastreport报表是可以打印,也可以扫描 但是我们对条码的要求比较高,检测出来说是译码率比较低,我也要昏倒了呀 所以才想到用斑马机带的ZPL指令请使用过的大侠帮忙
      

  2.   

    ZEBRA自带的打印驱动一般情况下够用
    如果你要直接向打印口发命令
    1.可用
      hPort := CreateFile('\\.\LPT1', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
    然后用WriteFile向打印机发数据
    2.可用winio来直接对端口进行操作
      

  3.   

    keiy 大侠能详细点吗?我看不懂
      

  4.   

    原理上是把ZPL文件发送至打印机端口就OK了。如果抛开程序,直接在CMD窗口中运行“copy c:\a.txt com1”。其中a.txt为ZPL文件,com1为打印机端口(具体需要察看你打印机的端口)。即用程序把文件送到打印机端口就好了。
      

  5.   

    找一个COM组件,把ZPL指令发送到COM端口就好了。
      procedure WriteLine(Line:string);
            var s:string;
                count:integer;
         begin
          S := Line;
          Count := Length(S);
          Count := Comm1.Write(S[1], Count);
          sleep(30);
         end;writeline('^XA');
    writeline('^MCY');
    writeline('^XZ');
    writeline('^XA');

    。。
    。。
      

  6.   

    ZPL不能打印预览,如果你的打印机是网卡的那种,在打印里头是可以预览
      

  7.   

    这个做过,但不能预览吧
    使用报表工具,效果基本上都不好,
    在条码打印机上打印使用RM、FR、Rave效果都不好,
    使用ReportBuilder(比前两者稍好),但也不可取,
    ActiveReport没试过,所以还是调用ZPL指令打印效果好。
      

  8.   

    给你一段我写过的代码供你参考一下:
    一、如果是并口连接打印机,直接这样写就OK了,至于ZPL II语言,你可从网上下载,语法还是相当简单的!procedure TForm1.Button8Click(Sender: TObject);
    var
      lpt:textfile;
    begin
      assignFile(lpt,'LPT1');
      rewrite(lpt);
      write(lpt,'^XA^FO10,10^BCN,100^FD12345^FS^XZ');
      CloseFile(lpt);
    end;二、如果是USB口连接打印机的话有两种方法,一是在CMD窗口下执行以下命令
    NET USE LPT1 \\计算机名\共享斑马打印机名称 PERSISTENT:YES
    将USB虚拟成LPT1,这样用以上程序也可以使用
    三、要使用斑马打印机WINDOWS驱动来实现uses winspool
    ....
    procedure WriteRawStringToPrinter(PrinterName:String; S:String);
    var
      Handle: THandle;
      N: DWORD;
      DocInfo1: TDocInfo1;
    begin
      if not OpenPrinter(PChar(PrinterName), Handle, nil) then
      begin
        ShowMessage('error ' + IntToStr(GetLastError));
        Exit;
      end;
      with DocInfo1 do begin
        pDocName := PChar('test doc'); {在打印列表中显示的打印内容}
        pOutputFile := nil;
        pDataType := 'RAW';            {关键,数据类型必须是RAW,这样打印机通过驱动程序才能识别ZPL语言}
      end;
      StartDocPrinter(Handle, 1, @DocInfo1);
      StartPagePrinter(Handle);
      WritePrinter(Handle, PChar(S), Length(S), N);
      EndPagePrinter(Handle);
      EndDocPrinter(Handle);
      ClosePrinter(Handle);
    end;procedure TForm1.PrintIIBtnClick(Sender: TObject);
    var
      ZPL: string;
      slist: TStringList;
    begin
      slist := TStringList.Create;
      slist.Clear;
      slist.LoadFromFile('D:\ZPL.TXT');  {将ZPL语言放入文本文件中,方便调用}
      ZPL := slist.Text;
      WriteRawStringToPrinter(ComboBox1.Text,ZPL); {此处COMBOBOX1.TXT为安装过驱动程序的ZEBRA打印机名称,你可手工输入,也可自动获取}
    end;以上是我常用的方式,主要是现在客户使用USB的越来越多,所以这种方法简单快捷,楼主可以参考一下!!