Delphi打印到Zebra打印机

时间:2013-08-13 00:28:15

标签: delphi delphi-xe3 zebra-printers

我编写了一个将ZPLII数据输出到Zebra打印机的功能,如下所示

var
  St : string;

StartDocument(DocName);
StartPage;
Try
For I:=0 to DataToPrint.Count-1 do
 Begin
  St:=FormatPrintLine(I);
   Try
    Escape(PrinterHandle,PASSTHROUGH,Length(St),PAnsiChar(St),Nil);
   Except on E:Exception do
    begin
      GetWin32ApiErrorMessage(FErrorCode,FErrorText);
      Raise EPrinter.CreateFmt('Printer Write Error %d'+#13+
                               'While Printing To '+PrinterName+#13+
                               ErrorText,[ErrorCode]);
     end;
   End;
 end;
Finally
 EndPage;
 EndDocument;

我已经使用命令提示符测试了标签数据,以便从文本文件中打印出标签数据,并且标签打印正确但我无法从我的应用程序中打印出来。如果我暂停打印机,我可以看到作业被发送到打印机,作业的大小是2.12Kb,大致是标签的大小,但没有打印出来。 Zebra打印机上的数据指示灯亮起但没有打印任何内容。我用我们拥有的两台Zebra打印机试过这个,所以它不是打印机问题。我在这一点上的猜测是,程序可能没有将整个标签数据发送到打印机,并且从未收到结束,但是当我跟踪发送请求时,正确发送了everthing。打印机还显示作业有0/0页面的标签,但我不明白为什么它没有发送标签。除了^ XZ终止字符之外,是否还需要在标签数据的末尾添加一些特殊内容?如果有帮助,我也在使用Delphi XE3。

1 个答案:

答案 0 :(得分:0)

感谢大家的帮助,我能够使用以下更改成功打印我的标签:

St: AnsiString;
...
StartDocument(DocName);
StartPage;
Try
 For I:=0 to DataToPrint.Count-1 do
  Begin
   St:=FormatPrintLine(I);
    Try
     WritePrinter(PrinterHandle,PChar(St),Length(St),N);
    Except on E:Exception do
     begin
       GetWin32ApiErrorMessage(FErrorCode,FErrorText);
       Raise EPrinter.CreateFmt('Printer Write Error %d'+#13+
                               'While Printing To '+PrinterName+#13+
                               ErrorText,[ErrorCode]);
      end;
    End;
  end;
Finally
 EndPage;
 EndDocument;

我还必须更改为writeprinter而不是escape。在我将st改为输入AnsiString但是writeprinter成功后,Escape没有输出任何内容。