ESC/POS不同对齐在一条线上



我正在使用Delphi,有人可以帮助我建立正确的ESC/POS命令,以便打印输出行如下:

"Article_Name        100.00$"

所以line的左边部分应该是左对齐,右边部分应该是右对齐。我试图实现它与反向馈送:

'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

所以反向馈送是有效的,但对齐不(所以在结果打印输出我有:

AAAAA
BBBBBCCCCC

我可以在ESC/POS命令上实现它吗?或者我必须在一些格式函数上构建所需的字符串?

如果我记得正确的话,ESC/POS 'alignment'适用于行上的所有数据,并且可能仅在您向行写入任何内容之前才起作用。所以你可以:

  • 尝试,看看是否只有'回车' (CR: Char(13)Char($D)),然后不同的Char($1B)+'a'+Char(...)将工作,
  • 或者,假设您使用等宽字体,使用Delphi代码将数据格式化为固定长度的字符串。可能与格式功能。

额外提示:您可以使用#语法编写+Char()+,例如:'BBBBB'#$1B'K'#30

我没有找到通过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;

正如你所看到的,我正在分析字体,字体样式和打印区域宽度,根据它我计算偏移

相关内容

  • 没有找到相关文章

最新更新