为什么在使用直接打印时字符串会被截断?
|
我正在尝试使用esc / p命令(EPSON TM-T70)直接打印到打印机,而不使用打印机驱动程序。在这里找到代码。
但是,如果我尝试打印任何字符串,它们将被截断。例如:
MyPrinter := TRawPrint.Create(nil);
try
MyPrinter.DeviceName := \'EPSON TM-T70 Receipt\';
MyPrinter.JobName := \'MyJob\';
if MyPrinter.OpenDevice then
begin
MyPrinter.WriteString(\'This is page 1\');
MyPrinter.NewPage;
MyPrinter.WriteString(\'This is page 2\');
MyPrinter.CloseDevice;
end;
finally
MyPrinter.Free;
end;
仅打印“这是这个”!我通常不使用MyPrinter.NewPage
发送换行命令,但是无论如何,为什么它会截断字符串?
另请注意RawPrint单元WriteString
功能:
Result := False;
if IsOpenDevice then begin
Result := True;
if not WritePrinter(hPrinter, PChar(Text), Length(Text), WrittenChars) then begin
RaiseError(GetLastErrMsg);
Result := False;
end;
end;
如果我在此处放置一个断点并逐步执行代码,则将WrittenChars
设置为14,这是正确的。为什么会这样呢?
没有找到相关结果
已邀请:
2 个回复
撵穆
调用函数时,您正在发送的字符数是多少,但是该函数可能期望缓冲区的大小。将其替换为SizeOf(s)
。 由于一个Unicode字符的大小恰好是2个字节,因此当您需要缓冲区大小时发送“ 7”时,实际上是在告诉API仅使用缓冲区的一半。因此,所有字符串都大致分为两半。
览幕堤分