tm220 print mode refactoring

This commit is contained in:
EugeneTes
2026-01-21 09:19:24 +01:00
parent fe18db2642
commit cb231801f1
7 changed files with 64 additions and 30 deletions

View File

@@ -35,6 +35,7 @@ kernel.Bind<ILogger>().ToMethod(ctx =>
var loggerFactory = LoggerFactory.Create(builder => var loggerFactory = LoggerFactory.Create(builder =>
{ {
builder.AddConsole(); builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Trace);
}); });
return loggerFactory.CreateLogger("EpsonPrintService"); return loggerFactory.CreateLogger("EpsonPrintService");
}); });
@@ -48,10 +49,12 @@ kernel.Bind<PrinterDiscoveryBackgroundTask>().ToSelf().InSingletonScope();
kernel.Bind<HeartbeatBackgroundTask>().ToSelf().InSingletonScope(); kernel.Bind<HeartbeatBackgroundTask>().ToSelf().InSingletonScope();
var printLoop = kernel.Get<PrintLoop>(); var printLoop = kernel.Get<PrintLoop>();
var printServer = kernel.Get<PrintServer>();
var discoveryTask = kernel.Get<PrinterDiscoveryBackgroundTask>(); var discoveryTask = kernel.Get<PrinterDiscoveryBackgroundTask>();
var heartbeatTask = kernel.Get<HeartbeatBackgroundTask>(); var heartbeatTask = kernel.Get<HeartbeatBackgroundTask>();
//printServer.RegisterPrinter("10.0.20.12");
await printLoop.StartAsync(); await printLoop.StartAsync();

View File

@@ -378,12 +378,14 @@ receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco")
var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt); var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(serializedReceipt);
KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 20, lineWidth: 33); KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33);
var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); var printCommands = converter.ConvertToPrintCommands(deserializedReceipt);
Console.WriteLine("=== PRINT COMMANDS ===\n"); Console.WriteLine("=== PRINT COMMANDS ===\n");
var printer = new HtmlPrinter(@".\test.html", paperWidth: 258); //var printer = new HtmlPrinter(@".\test.html", paperWidth: 258);
await printer.ConnectAsync(""); //await printer.ConnectAsync("");
var printer = new EpsonPrinter();
await printer.ConnectAsync("127.0.0.1",8888);
await Task.Delay(200); await Task.Delay(200);
await printer.FeedLinesAsync(1); await printer.FeedLinesAsync(1);
await printer.SetCustomLineSpacing(22); await printer.SetCustomLineSpacing(22);
@@ -395,28 +397,26 @@ foreach (var command in printCommands)
if (command.IsRed) attributes += "[RED] "; if (command.IsRed) attributes += "[RED] ";
Console.WriteLine($"{attributes}{command.Text}"); Console.WriteLine($"{attributes}{command.Text}");
await printer.SetBiggerFontTM220(command.IsBig);
if (command.IsBig)
{ await Task.Delay(200);
await printer.SetFontSizeAsync(2, 1);
}
else
{
await printer.SetFontSizeAsync(1, 1);
}
await printer.SetRedColor(command.IsRed); await printer.SetRedColor(command.IsRed);
//await Task.Delay(200); await Task.Delay(200);
await printer.SetEmphasized(command.IsBold); await printer.SetEmphasized(command.IsBold);
//await Task.Delay(200); await Task.Delay(200);
await printer.PrintTextAsync(command.Text + "\n"); await printer.PrintTextAsync(command.Text + "\n");
//await Task.Delay(200); await Task.Delay(200);
} }
await printer.FeedLinesAsync(5);
await Task.Delay(200*5);
await printer.CutAsync();
//await printer.SetDefaultLineSpacing(); //await printer.SetDefaultLineSpacing();
//await printer.PrintTextAsync( //await printer.PrintTextAsync(

View File

@@ -304,15 +304,27 @@ public class EpsonPrinter : IEpsonPrinter
_logger?.LogInformation("Selecting font: {Font}", font); _logger?.LogInformation("Selecting font: {Font}", font);
await SendRawAsync(command); await SendRawAsync(command);
} }
/// <summary>
public async Task SetBiggerFontTM220(bool enabled) /// Change to bigger font mode for TM-T20/220 printers
/// </summary>
/// <param name="biggerWidth"></param>
/// <param name="biggerHeight"></param>
/// <param name="secondaryFont"></param>
/// <see cref="https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/esc_exclamation.html"/>
public async Task SetBiggerFontTM220(bool biggerWidth, bool biggerHeight=false, bool secondaryFont=true)
{ {
_logger?.LogInformation("{Action} bigger font mode for TM-T20/220", _logger?.LogInformation("Setting bigger font mode: Width={BiggerWidth}, Height={BiggerHeight}, SecondaryFont={SecondaryFont}",
enabled ? "Enabling" : "Disabling"); biggerWidth, biggerHeight, secondaryFont);
if (enabled)
await SendRawCommandAsync([0x1b, 0x21, 0x20 + 0x01]); byte value = 0x00;
else if (biggerWidth)
await SendRawCommandAsync([0x1b, 0x21, 0x00]); value += 0x10;
if (biggerHeight)
value += 0x20;
if (secondaryFont)
value += 0x01;
await SendRawCommandAsync([0x1b, 0x21, value]);
} }

View File

@@ -31,7 +31,8 @@ public class HtmlPrinter : IEpsonPrinter
private bool _isEmphasized; private bool _isEmphasized;
private bool _isRedColor; private bool _isRedColor;
private bool _isQuadrupleMode; private bool _isQuadrupleMode;
private bool _isBiggerFontTM220; private bool _isBiggerFontWidthTM220;
private bool _isBiggerFontHeightTM220;
private int _lineSpacing = 14; // Default line spacing in pixels (scaled for screen) private int _lineSpacing = 14; // Default line spacing in pixels (scaled for screen)
private int _absolutePosition; // Current X position offset private int _absolutePosition; // Current X position offset
@@ -239,10 +240,13 @@ public class HtmlPrinter : IEpsonPrinter
} }
/// <inheritdoc /> /// <inheritdoc />
public Task SetBiggerFontTM220(bool enabled) public Task SetBiggerFontTM220(bool biggerWidth, bool biggerHeight = false, bool secondaryFont = true)
{ {
_logger?.LogInformation("HtmlPrinter: {Action} bigger font mode for TM-T20/220", enabled ? "Enabling" : "Disabling"); _logger?.LogInformation("HtmlPrinter: Setting bigger font mode: Width={BiggerWidth}, Height={BiggerHeight}, SecondaryFont={SecondaryFont}",
_isBiggerFontTM220 = enabled; biggerWidth, biggerHeight, secondaryFont);
_isBiggerFontWidthTM220 = biggerWidth;
_isBiggerFontHeightTM220 = biggerHeight;
// Note: secondaryFont is ignored in HTML simulation as it only affects the physical printer's font selection
return Task.CompletedTask; return Task.CompletedTask;
} }
@@ -468,7 +472,8 @@ public class HtmlPrinter : IEpsonPrinter
_isEmphasized = false; _isEmphasized = false;
_isRedColor = false; _isRedColor = false;
_isQuadrupleMode = false; _isQuadrupleMode = false;
_isBiggerFontTM220 = false; _isBiggerFontWidthTM220 = false;
_isBiggerFontHeightTM220 = false;
_lineSpacing = 14; _lineSpacing = 14;
_absolutePosition = 0; _absolutePosition = 0;
} }
@@ -490,11 +495,16 @@ public class HtmlPrinter : IEpsonPrinter
effectiveHeightMultiplier *= 2; effectiveHeightMultiplier *= 2;
} }
if (_isBiggerFontTM220) if (_isBiggerFontWidthTM220)
{ {
effectiveWidthMultiplier *= 2; effectiveWidthMultiplier *= 2;
} }
if (_isBiggerFontHeightTM220)
{
effectiveHeightMultiplier *= 2;
}
int fontSize = baseHeight * effectiveHeightMultiplier; int fontSize = baseHeight * effectiveHeightMultiplier;
styles.Add($"font-size: {fontSize}px"); styles.Add($"font-size: {fontSize}px");

View File

@@ -90,7 +90,7 @@ public interface IEpsonPrinter : IAsyncDisposable
/// <summary> /// <summary>
/// Enable or disable bigger font mode for TM-T20/220 /// Enable or disable bigger font mode for TM-T20/220
/// </summary> /// </summary>
Task SetBiggerFontTM220(bool enabled); Task SetBiggerFontTM220(bool biggerWidth, bool biggerHeight = false, bool secondaryFont = true);
/// <summary> /// <summary>
/// Print text to the printer /// Print text to the printer

View File

@@ -34,6 +34,8 @@ public class EpsonPrintService: IPrintService
var printerId = await epsonPrinter.GetPrinterIdAsync(); var printerId = await epsonPrinter.GetPrinterIdAsync();
_logger.LogInformation("Printer ID({ip}): {PrinterId}", printerIp, printerId);
var status = await epsonPrinter.GetPrinterStatusAsync(); var status = await epsonPrinter.GetPrinterStatusAsync();
if (!status.IsOnline) if (!status.IsOnline)
{ {

View File

@@ -42,6 +42,13 @@ public class TM_T30IIITranslated : IPrinter
foreach (var command in commands) foreach (var command in commands)
{ {
if(command.SetLineSpacing.HasValue)
{
Console.WriteLine($"Setting line spacing to {command.SetLineSpacing.Value}");
await _printer.SetCustomLineSpacing(command.SetLineSpacing.Value);
Console.WriteLine($"------------------------------------------------------");
continue;
}
if (command.IsBig) if (command.IsBig)
{ {
await _printer.SetFontSizeAsync(2, 1); await _printer.SetFontSizeAsync(2, 1);