Delphi打印到Zebra打印机
我编写了一个函数,将ZPLII数据打印到Zebra打印机,如下所示Delphi打印到Zebra打印机,delphi,delphi-xe3,zebra-printers,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
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。感谢大家的帮助,我能够使用以下更改成功打印标签:
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类型后,Escape没有打印出任何内容,但writeprinter成功了。请添加声明,以便我们可以看到它并知道它是什么类型@SirRufo要求您提供
FormatPrintLine
是什么;St
(看起来是一个字符串)的声明并不是很重要,但由于它是发送给打印机的内容,因此需要它的内容。“当我发送转义序列时,我的打印机无法打印,我不打算向您展示。为什么它不工作?”这很难回答。是的,它应该是Ansistring看起来就是这样做的。我想,因为我正在添加PAnsiChar(st)作为字符串参数,所以它会工作,但我想不会。谢谢你的帮助