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

Printout special symbols on thermal printer

我在 EPSON TM-T88V 热敏打印机上通过 esc/pos 命令打印特殊符号(€、£、¥、ý)时遇到问题。这是部分代码:

FPrintoutLines := TStringList.Create;
try
  FPrintoutLines.Add(#B'@');
  FPrintoutLines.Add(#B'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;

结束;

我找到方法了。这是在将字符串发送到打印机之前转换字符串的函数。现在它可以在所有 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;