我使用Delphi,有人可以帮我为下一个打印输出行构建正确的ESC / POS命令:
subimage
因此,左侧部分应该左对齐,右侧部分右对齐。我试图用反向反馈来实现它:
"Article_Name 100.00$"
所以反向输入是有效的,但是没有对齐(所以结果打印输出我有:
'AAAAA' + Char($A);
'BBBBB' + Char($1B) + "K" + Char(30);
Char($1B)+'a'+Char(2) - set right alignment
'CCCCC' + Char($A);
Char($1B)+'a'+Char(1) - set back left alignment
我可以通过ESC / POS命令实现它,或者我必须在某些格式函数上构建所需的字符串吗?
答案 0 :(得分:1)
如果我没记错的话,ESC / POS'对齐'适用于该行上的所有数据,并且可能仅在您向该行写入任何内容之前有效。所以你可以:
Char(13)
或Char($D)
),然后另一个Char($1B)+'a'+Char(...)
将起作用, 额外提示:您可以使用+Char()+
语法撰写#
,例如:'BBBBB'#$1B'K'#30
答案 1 :(得分:0)
我没有找到通过ESC / POS命令实现它的任何方法。所以这是我对格式函数的实现:
procedure TNativePrint.DoAddLineWithTwoAlignments(const ALeftStr : string;
ALeftStrFont : TFontType;
ALeftStrFontStyle : TFontStyle;
const ARightStr : string;
ARightStrFont : TFontType;
ARightStrFontStyle : TFontStyle;
APrintAreaWidth : integer = 500);
const
vFomatLine = '';
var
vOffset : integer;
vCharSize : integer;
vLeftSize : integer;
vRightSize : integer;
begin
vCharSize := 12;
if (ALeftStrFont = ftFontA) then begin
vCharSize := 12;
end else if (ALeftStrFont = ftFontB) then begin
vCharSize := 9;
end;
if (ALeftStrFontStyle in [fsDoubleWidth, fsDoubleHW, fsBoldDoubleWidth, fsBoldDoubleHW]) then begin
vCharSize := vCharSize * 2;
end;
vLeftSize := length(ALeftStr) * vCharSize;
if (ARightStrFont = ftFontA) then begin
vCharSize := 12;
end else if (ARightStrFont = ftFontB) then begin
vCharSize := 9;
end;
if (ARightStrFontStyle in [fsDoubleWidth, fsDoubleHW, fsBoldDoubleWidth, fsBoldDoubleHW]) then begin
vCharSize := vCharSize * 2;
end;
vRightSize := length(ARightStr) * vCharSize;
vOffset := APrintAreaWidth - ( vLeftSize + vRightSize);
DoSetFont(ALeftStrFont, ALeftStrFontStyle);
DoAddLine(ALeftStr, false);
DoSetFont(ARightStrFont, ARightStrFontStyle);
DoAddLine(#$1B'\'+AnsiChar(vOffset)+#0, false);
DoAddLine(ARightStr);
end;
正如你所看到我正在分析字体,字体样式和打印区域宽度,依赖于它我计算偏移量