Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi打印到Zebra打印机_Delphi_Delphi Xe3_Zebra Printers - Fatal编程技术网

Delphi打印到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

我编写了一个函数,将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。

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

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)作为字符串参数,所以它会工作,但我想不会。谢谢你的帮助