我编写了一个将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。
答案 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没有输出任何内容。