using System.Text.Json; using Inspectron.Epson.PrintServer.Printers.Utils; using Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe; using Inspectron.Epson.PrintServer.PrintServices; using FinalReceipt = Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe.FinalReceipt; namespace Inspectron.Epson.PrintServer.Printers; public class TM_T30IIITranslated:IPrinter { private readonly IEpsonPrinter _printer; public TM_T30IIITranslated(IEpsonPrinter printer) { _printer = printer; } public Task InitAsync() { return _printer.InitAsync(); } public async Task PrintImageAsync(string path) { await _printer.SetAbsolutePrintPosition(100); await _printer.LoadImageAsync(Path.Combine("logos", path), 384); await Task.Delay(100); await _printer.FeedLinesAsync(1); await _printer.SetAbsolutePrintPosition(0); } public async Task SetFontSizeAsync(int fontSize) { //await _printer.SetFontSizeAsync(fontSize, fontSize); } public async Task PrintTextAsync(string text) { FinalReceipt? receipt; try { receipt = JsonSerializer.Deserialize(text); } catch { // Fallback to kitchen receipt await PrintKitchen(text); return; } var converter = new ReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); var printCommands = converter.ConvertToPrintCommands(receipt); await _printer.FeedLinesAsync(1); await _printer.SetCustomLineSpacing(22); foreach (var command in printCommands) { string attributes = ""; if (command.IsBig) attributes += "[BIG]\n"; if (command.IsBold) attributes += "[BOLD]\n"; Console.WriteLine($"{attributes}{command.Text}"); if (command.IsBig) { await _printer.SetFontSizeAsync(2, 1); } else { await _printer.SetFontSizeAsync(1, 1); } await _printer.SetEmphasized(command.IsBold); await _printer.PrintTextAsync(command.Text + "\n"); } await _printer.SetDefaultLineSpacing(); await _printer.FeedLinesAsync(10); await Task.Delay(200); } private async Task PrintKitchen(string text) { ReceiptTranslator translator = new ReceiptTranslator(); var ast = translator.ParseReceipt(text); KitchenReceiptPrinter printer = new KitchenReceiptPrinter(lineWidth: 33, 21); var commands = printer.ConvertToCommands((TranslatedKitchenReceipt)ast); foreach (KitchenPrintCommand command in commands) { if (command.IsBig) { await _printer.SetFontSizeAsync(2,2); } else { await _printer.SetFontSizeAsync(1, 1); } await Task.Delay(200); await _printer.SetRedColor(command.IsRed); await Task.Delay(200); await _printer.SetEmphasized(command.IsBold); await Task.Delay(200); await _printer.PrintTextAsync(command.Text + "\n"); await Task.Delay(200); } await _printer.FeedLinesAsync(10); await Task.Delay(1000); } public async Task Cut() { await _printer.CutAsync(); await Task.Delay(200); } }