You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11下Epson TM 30收据打印机左侧边距异常求助

Delphi 11.0下Epson TM 30共享打印边距异常问题

环境信息

  • 开发环境:Delphi 11.0
  • 设备:2台电脑 + 1台Epson TM 30收据打印机
  • 使用状态:Epson TM 30通过USB连接至PC1(Client4),PC2(Client3)通过局域网共享路径\\client4\epsontm30实现共享打印

问题现象

打印可正常输出但边距效果异常:

  • 两台电脑打印时,打印起始位置距左侧达20mm,存在固定10mm左侧边距的同时还额外多出10mm;
  • Client4本地打印偶尔会出现左侧边距变为10mm的情况,原因不明。

已安装最新版Epson TM 30驱动,使用Epson TM工具也无法解决该问题。

现有打印代码

// Get correct printer
Printer.PrinterIndex:=Printer.Printers.IndexOf('EpsonTM30');
S:='PC di stampa : ' + ComputerName; // Print computer name

// Impostazioni X,Y di partenza ...
StartX:=1;
StartY:=5;
PrintX:=StartX - 91; // Need because GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY) = 100
PrintY:=StartY;

Printer.BeginDoc;
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style + [fsBold];
PrintX:=(Printer.PageWidth - Printer.Canvas.TextWidth(S)) Div 2 ;

Printer.Canvas.TextOut(PrintX, PrintY, S);
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style - [fsBold];

PrintY:=PrintY + Printer.Canvas.TextHeight(S) + 3;

S:=LongDayName[DayoftheWeek(DP.Date)];
S:=FirstCharUp(S);
S:=S + #32 + FormatDateTime('dd/mm/yyyy', DP.Date);
Printer.Canvas.TextOut(StartX, PrintY, 'Data : ');
PrintX:=StartX + Printer.Canvas.TextWidth('Data : ') + 3;
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style + [fsBold];
Printer.Canvas.TextOut(PrintX, PrintY, S);
PrintY:=PrintY + Printer.Canvas.TextHeight(S) + 20;
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style - [fsBold];
PrintX:=StartX;
Printer.Canvas.TextOut(PrintX, PrintY, ' ');

S:='Chiusura : ';
Printer.Canvas.TextOut(PrintX, PrintY, S);
PrintX:= PrintX + Printer.Canvas.TextWidth(S) + 3;
S:='0,00'; 
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style + [fsBold];
Printer.Canvas.TextOut(PrintX, PrintY, S);
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style - [fsBold];
PrintY:=PrintY + Printer.Canvas.TextHeight(S) + 3;
PrintX:=StartX;
TX:=StartX + Printer.Canvas.TextWidth('Chiusura : ');

S:='Pos : ';
while PrintX < TX - Printer.Canvas.TextWidth(S) do PrintX := PrintX + 1; // In order to align the string
Printer.Canvas.TextOut(PrintX, PrintY, S);
PrintX := PrintX + Printer.Canvas.TextWidth(S) + 3;
S:='0,00';
while Printer.Canvas.TextWidth(S)<Printer.Canvas.TextWidth(CassaEdt.Text) do S:=#32 + S;
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style + [fsBold];
Printer.Canvas.TextOut(PrintX, PrintY, S);
Printer.Canvas.Font.Style:=Printer.Canvas.Font.Style - [fsBold];
PrintY:=PrintY + Printer.Canvas.TextHeight(S) + 3;
PrintX:=StartX;
Printer.EndDoc;

需求目标

  • 至少实现打印起始位置对齐GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY)的返回值;
  • 若能实现两台电脑均以GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY) Div 2(即50)作为左侧偏移量更佳。

内容的提问来源于stack exchange,提问作者Daniele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:25:36