0

我编写了一个将 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 打印机进行了尝试,所以这不是打印机问题。我在这一点上的猜测是,也许程序没有将整个标签数据发送到打印机并且永远不会收到结尾,但是当我跟踪发送请求时,一切都被正确发送。打印机还显示该作业的标签页数为 0/0,但我不明白为什么它不发送标签。除了 ^XZ 终止字符之外,标签数据的末尾是否还有一些特殊的内容?如果有帮助,我也在使用 Delphi XE3。

4

1 回答 1

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 而不是逃跑。在我将 st 更改为 AnsiString 类型但 writeprinter 成功后,Escape 没有打印任何内容。

于 2013-08-14T00:44:52.740 回答