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
相关产品推荐
相关产品推荐

