热敏打印机上的打印输出特殊符号

时间:2015-10-27 15:07:00

标签: delphi delphi-xe thermal-printer escpos

我无法通过esc / pos命令在EPSON TM-T88V热敏打印机上打印特殊符号(€,£,¥,ý)。以下是代码的一部分:

FPrintoutLines := TStringList.Create;
try
  FPrintoutLines.Add(#$1B'@');
  FPrintoutLines.Add(#$1B't'#16);
  FPrintoutLines.Add('€, £, ¥, ý'+#$A);
  Print
finally
  FPrintoutLines.Free;  
end;

在Windows XP上,我的所有符号都有正确的打印输出,问题出在Windows 7和8上。

我使用命令构建一个字符串列表,然后逐行将此命令发送到打印机。这适用于所有其他符号和图像,但不适用于特殊符号。

有人可以帮助我吗,如何从任何Windows打印此符号?

以下是打印行的代码:

var
  vCurrentLine : AnsiString;
begin
...
for i := 0 to FPrintoutLines.Count - 1 do begin
  vCurrentLine := AnsiString(FPrintoutLines[i]);

  if (PrintRawData(hPrn, PAnsiChar(vCurrentLine), Length(vCurrentLine)) < 0) then begin
    log('PrintRawData error', 'NativePrint');
    EndRawPrintPage(hPrn);
    EndRawPrintJob(hPrn);
    Exit;
  end;

端;

1 个答案:

答案 0 :(得分:0)

我找到了方法。这是在将字符串发送到打印机之前转换字符串的功能。现在它可以在所有Windows上正常运行

function TNativePrint.WideStringToString(const AStr : UnicodeString; vCodePage : Word) : AnsiString;
var
  vLen: Integer;
begin
  vLen := Length(AStr);

  if (vLen = 0) then begin
    result := '';
    exit;
  end;

  SetAnsiString(@result, @AStr[1], vLen, vCodePage);
end;