在热敏打印机上打印输出特殊符号
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;
我在 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;