using Inspectron.Epson; using Inspectron.Epson.PrintServer.Printers.Utils; using Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe; using Inspectron.Epson.PrintServer.Printers.Utils.KitchenReceipt; using Inspectron.Epson.SOAP; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using System.Text; using System.Text.Json; using System.Xml.Linq; using Inspectron.Epson.PrintServer.Printers.Utils.FinalReceipt; using Inspectron.Epson.PrintServer.Printers.Utils.OrderItems; using FinalReceipt = Inspectron.Epson.PrintServer.Printers.Utils.FinalRecipe.FinalReceipt; //SoapEpsonPrinter printer = new SoapEpsonPrinter("localhost:8888"); //var print = new SoapEpsonPrint(); //print // .AddText("123") // .AddFeed() // .AddFeed() // .AddCut(SoapEpsonPrint.CUT_FEED); //var task = await printer.Send(print); //var status = await printer.GetStatus(print); //HttpClient httpClient = new HttpClient(new HttpClientHandler //{ // ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true //}); //var requestText = @" // // // Hello, World! // // //"; //var request = new HttpRequestMessage(HttpMethod.Post, // "https://localhost:8888/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000"); //var response = httpClient.Send(request); //var responseText = await response.Content.ReadAsStringAsync(); //Console.WriteLine(responseText); //var printer = new EpsonPrinter(); //await printer.ConnectAsync("127.0.0.1",8888); //for (int i = 0; i < 20; i++) //{ // await printer.PrintTextAsync("Hello\n"); //} //await printer.FeedLinesAsync(5); //await printer.CutAsync(); //var status = await printer.GetPrinterStatusAsync(); //Console.ReadLine(); var receipt = new FinalReceipt { CompanyName = "Klingler Gastro AG", Address1 = "Münzplatz 3", Address2 = "CH-8001 Zürich", Phone = "043 321 22 22", ReceiptNumber = "1-81-202", DateTime = new DateTime(2025, 12, 16, 14, 58, 0), Guests = 2, Total = 160.00m, Currency = "CHF", TotalInAlternateCurrency = 172.80m, AlternateCurrency = "EUR", PaymentMethod = "MASTER", PaymentAmount = 160.00m, WaiterName = "Yves", Terminal = "Hauptkasse ZH", TableNumber = "12", VatNumber = "CHE-449.635.880 MWST", ThankYouMessage = "Das Team bedankt sich herzlich für Ihren", GoodbyeMessageLine1 = "Besuch.", GoodbyeMessageLine2 = "Auf Wiedersehen.", SplitPayments = new List { new SplitPaymentInfo { PaymentMethod = "Cash", Amount = 50.00m, Currency = "CHF"}, new SplitPaymentInfo { PaymentMethod = "Card", Amount = 110.00m, Currency = "CHF" } }, TerminalReceipts = new List { new PaymentTerminalReceipt { ReceiptType = "*** Kundenbeleg ***", BookingType = "Buchung", PaymentSystem = "TWINT", TransactionNumber = "XXXXXXXXXXXXXXX1494", TransactionDateTime = new DateTime(2025, 11, 11, 12, 34, 49), TerminalId = "31108834", AID = "A0000015749E", TransactionSeqCount = "6127", TransactionRefNo = "99036644599", AuthCode = "0d3396", AcquirerId = "2", EftAmount = 67.00m, TipAmount = 6.70m, TotalEftAmount = 73.70m, Currency = "CHF" }, new PaymentTerminalReceipt { ReceiptType = "*** Kundenbeleg ***", BookingType = "Buchung", PaymentSystem = "MASTER", TransactionNumber = "XXXXXXXXXXXXXXX2587", TransactionDateTime = new DateTime(2025, 11, 11, 12, 36, 12), TerminalId = "31108834", AID = "A0000000041010", TransactionSeqCount = "6128", TransactionRefNo = "99036644600", AuthCode = "1a4b2c", AcquirerId = "1", EftAmount = 93.00m, TipAmount = 0.00m, TotalEftAmount = 93.00m, Currency = "CHF" } } }; // Add items receipt.Items.Add(new ReceiptItem { Quantity = 1, Description = "San Pellegrino 50cl", UnitPrice = 6.50m, TotalPrice = 6.50m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 1, Description = "Panna 50cl", UnitPrice = 6.50m, TotalPrice = 6.50m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 1, Description = "Granini Tomatensaft", UnitPrice = 5.50m, TotalPrice = 5.50m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 2, Description = "Business Lunch Menu Seco", UnitPrice = 44.00m, TotalPrice = 88.00m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 2, Description = "Brunello di Montalcino 1", UnitPrice = 16.00m, TotalPrice = 32.00m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 2, Description = "Espresso", UnitPrice = 5.50m, TotalPrice = 11.00m, TaxCategory = "A" }); receipt.Items.Add(new ReceiptItem { Quantity = 1, Description = "Tip", UnitPrice = 10.50m, TotalPrice = 10.50m, TaxCategory = "B" }); // Add tax breakdown receipt.TaxBreakdown.Add(new TaxInfo { Category = "A", Rate = 8.1m, Gross = 149.50m, Net = 138.30m, TaxAmount = 11.20m, Currency = "CHF" }); receipt.TaxBreakdown.Add(new TaxInfo { Category = "B", Rate = 0m, Gross = 10.50m, Net = 10.50m, TaxAmount = 0.00m, Currency = "CHF" }); var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); var deserializedReceipt = JsonSerializer.Deserialize(serializedReceipt); // Convert to print commands var converter = new FinalReceiptConverter(lineWidth: 48, bigFontLineWidth: 24); var printCommands = converter.Convert(serializedReceipt); // Print the commands Console.WriteLine("=== PRINT COMMANDS ===\n"); var printer = new HtmlPrinter(@".\test.html", paperWidth: 384); await printer.ConnectAsync(""); await printer.SetAbsolutePrintPosition(42); await printer.LoadImageAsync("ristorante-klinglers.ch-logo_white_bg.png", 300); await printer.PrintLoadedImage(); await printer.SetAbsolutePrintPosition(0); await Task.Delay(200); //await printer.FeedLinesAsync(1); await printer.SetCustomLineSpacing(22); foreach (var command in printCommands) { string attributes = ""; if (command.IsBig) attributes += "[BIG] "; if (command.IsBold) attributes += "[BOLD] "; Console.WriteLine($"{attributes}{command.Text}"); if (command.IsBig) { await printer.SetFontSizeAsync(2, 1); } else { await printer.SetFontSizeAsync(1, 1); } //await Task.Delay(200); await printer.SetEmphasized(command.IsBold); //await Task.Delay(200); await printer.PrintTextAsync(command.Text + "\n"); //await Task.Delay(200); } //var receipt = new KitchenReceipt //{ // Title = "Warme Küche", // TransactionDateTime = new DateTime(2025, 10, 23, 12, 18, 0), // ReceiptNumber = "132018166", // WaiterName = "Mariano Amato", // WaiterId = "32 (VK Restaurant)", // TableNumber = 22 //}; //// Add dishes (this section can be empty if no dishes were ordered) //receipt.Gangs.Add(new Gang(1, "Gang")); //receipt.Gangs.Add(new Gang(2, "Gang")); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi") //{ // Modifications = new DishModifications // { // Removed = new List { "Wasabi" }, // Added = new List { "Extra Ginger" } // }, // Comment = "No soy sauce" //}); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl")); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki") //{ // Modifications = new DishModifications // { // Removed = new List { "Onion" }, // Added = new List { "Extra Sauce" } // }, // Comment = "Medium rare" //}); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco") //{ // Modifications = new DishModifications // { // Added = new List { "Extra Lime" } // } //}); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Avocado Sashimi")); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl")); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Beef Tataki")); //receipt.Gangs[1].Dishes.Add(new Dish(1, "Salmon Taco")); //receipt.Dishes.Add(new Dish(1, "Avocado Sashimi")); //receipt.Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl")); //receipt.Dishes.Add(new Dish(1, "Beef Tataki")); //receipt.Dishes.Add(new Dish(1, "Salmon Taco")); //// Add additional info //var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); //var deserializedReceipt = JsonSerializer.Deserialize(serializedReceipt); //KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 20, lineWidth: 33); //var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); //Console.WriteLine("=== PRINT COMMANDS ===\n"); //var printer = new HtmlPrinter(@".\test.html", paperWidth: 258); //await printer.ConnectAsync(""); //await Task.Delay(200); //await printer.FeedLinesAsync(1); //await printer.SetCustomLineSpacing(22); //foreach (var command in printCommands) //{ // string attributes = ""; // if (command.IsBig) attributes += "[BIG] "; // if (command.IsBold) attributes += "[BOLD] "; // if (command.IsRed) attributes += "[RED] "; // Console.WriteLine($"{attributes}{command.Text}"); // if (command.IsBig) // { // await printer.SetFontSizeAsync(2, 1); // } // else // { // await printer.SetFontSizeAsync(1, 1); // } // 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); //} //var receipt = new KitchenReceipt //{ // Title = "Warme Küche", // TransactionDateTime = new DateTime(2025, 10, 23, 12, 18, 0), // ReceiptNumber = "132018166", // WaiterName = "Mariano Amato", // WaiterId = "32 (VK Restaurant)", // TableNumber = "22", // SpecialInstruction = "Next dish" //}; //// Add dishes (this section can be empty if no dishes were ordered) //receipt.Gangs.Add(new Gang(2, "Gang")); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Avocado Sashimi") //{ // Modifications = new DishModifications // { // Removed = new List { "Wasabi" }, // Added = new List { "Extra Ginger" } // }, // Comment = "No soy sauce" //}); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Baby Spinach Salad with Truffl")); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Beef Tataki") //{ // Modifications = new DishModifications // { // Removed = new List { "Onion" }, // Added = new List { "Extra Sauce" } // }, // Comment = "Medium rare" //}); //receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco") //{ // Modifications = new DishModifications // { // Added = new List { "Extra Lime" } // } //}); //// Add additional info //var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true }); //var deserializedReceipt = JsonSerializer.Deserialize(serializedReceipt); //KitchenReceiptConverter converter = new KitchenReceiptConverter(bigLineWidth: 18, lineWidth: 33); //var printCommands = converter.ConvertToPrintCommands(deserializedReceipt); //Console.WriteLine("=== PRINT COMMANDS ===\n"); ////var printer = new HtmlPrinter(@".\test.html", paperWidth: 258); ////await printer.ConnectAsync(""); //bool useDelay=true; //var printer = new EpsonPrinter(); //await printer.ConnectAsync("127.0.0.1", 8888); //if (useDelay)await Task.Delay(200); //await printer.FeedLinesAsync(1); //await printer.SetCustomLineSpacing(22); //foreach (var command in printCommands) //{ // string attributes = ""; // if (command.IsBig) attributes += "[BIG] "; // if (command.IsBold) attributes += "[BOLD] "; // if (command.IsRed) attributes += "[RED] "; // Console.WriteLine($"{attributes}{command.Text}"); // await printer.SetBiggerFontTM220(command.IsBig, command.IsTall| command.IsBig, secondaryFont: false); // if (useDelay) await Task.Delay(200); // await printer.SetRedColor(command.IsRed); // if (useDelay) await Task.Delay(200); // await printer.SetEmphasized(command.IsBold); // if (useDelay) await Task.Delay(200); // await printer.PrintTextAsync(command.Text + "\n"); // if (useDelay) await Task.Delay(200); //} //await printer.FeedLinesAsync(5); //if (useDelay) await Task.Delay(200*5); //await printer.CutAsync(); //await printer.SetDefaultLineSpacing(); //await printer.PrintTextAsync( // "1x San Pellegrino 50cl 6.50 6.50 A\n1x Panna 50cl 6.50 6.50 A"); //// Order Items Receipt Test //var orderItemsReceipt = new OrderItemsReceipt //{ // OrderNumber = "1", // QRInfo = "Margherita Pizza Classic longer text", // DateTime = new DateTime(2026, 1, 14, 14, 35, 47), // ClientNotes = "Some main note", // Items = new List // { // new OrderItem // { // Number = 1, // Name = "pappara", // Quantity = 1, // SubItems = new List { "pizza", "cola" }, // Comment = "Cola zero please" // }, // new OrderItem // { // Number = 2, // Name = "Classic Beef Burger", // Quantity = 1, // Modifications = new ItemModifications // { // Removed = new List { "Onion" }, // Added = new List { "butter" } // }, // Comment = "Medium rare please" // }, // new OrderItem // { // Number = 3, // Name = "Margherita Pizza Classic", // Quantity = 2, // Size = "L" // } // } //}; //var serializedOrderItems = JsonSerializer.Serialize(orderItemsReceipt, new JsonSerializerOptions { WriteIndented = true }); //Console.WriteLine(serializedOrderItems); //var deserializedOrderItems = JsonSerializer.Deserialize(serializedOrderItems); //var orderItemsConverter = new Inspectron.Epson.PrintServer.Printers.Utils.OrderItems.ReceiptConverter(lineWidth: 50, bigFontLineWidth: 21); //var printCommands = orderItemsConverter.ConvertToPrintCommands(deserializedOrderItems); //Console.WriteLine("=== PRINT COMMANDS ===\n"); //var printer = new HtmlPrinter(@".\order_items.html", paperWidth: 384); //await printer.ConnectAsync(""); //await Task.Delay(200); ////await printer.FeedLinesAsync(1); //await printer.SetCustomLineSpacing(22); //foreach (var command in printCommands) //{ // string attributes = ""; // if (command.IsBig) attributes += "[BIG] "; // if (command.IsBold) attributes += "[BOLD] "; // Console.WriteLine($"{attributes}{command.Text}"); // if (command.IsBig) // { // await printer.SetFontSizeAsync(2, 1); // } // else // { // await printer.SetFontSizeAsync(1, 1); // } // //await Task.Delay(200); // await printer.SetEmphasized(command.IsBold); // //await Task.Delay(200); // await printer.PrintTextAsync(command.Text + "\n"); // //await Task.Delay(200); //} // clear printer buffer //await printer.SendRawCommandAsync([0x10, 0x14, 0x08, 0x01, 0x03, 0x14, 0x01, 0x06, 0x02, 0x08]); // //for (int i = 0; i < 10; i++) //{ // await printer.SendRawCommandAsync(EpsonCommands.LineFeed); // await Task.Delay(200); //} //await printer.InitAsync(); //await Task.Delay(200); //KitchenReceiptPrinter krp = new KitchenReceiptPrinter(33); //var receipt = new TranslatedKitchenReceipt( // Location: "Warme Küche", // Date: "23-Okt-25 12:18 Nr.:13201B166", // Owner: "Mariano Amato\n32 (VK Restaurant)", // Tisch: "22", // items: new List // { // new KitchenGang("1. Gang"), // new KitchenProduct(1, "Avocado Sashimi"), // new KitchenProduct(1, "Baby Spinach Salad with Truffl"), // new KitchenGang("2. Gang"), // new KitchenProduct(1, "Beef Tataki"), // new KitchenProduct(1, "Salmon Taco") // } //); //var test = JsonSerializer.Serialize(receipt, new JsonSerializerOptions() { WriteIndented = true }); //Console.WriteLine(test); ////// Create printer with 42 character line width (default) //var commands = krp.ConvertToCommands(receipt); //foreach (PrintCommand command in commands) //{ // await printer.SetBiggerFontTM220(command.IsBig); // 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.SetBiggerFontTM220(true); // 24 //await printer.SetFontSizeAsync(2,2); //await Task.Delay(200); //await printer.SelectFont(EpsonCommands.PrinterFont.A); //await Task.Delay(200); //await printer.PrintTextAsync("HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_\n"); //await Task.Delay(200); //// 48 //await printer.SetFontSizeAsync(1, 1); //await Task.Delay(200); //await printer.SelectFont(EpsonCommands.PrinterFont.A); //await Task.Delay(200); //await printer.PrintTextAsync("HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_\n"); //await Task.Delay(200); //await printer.SetBiggerFontTM220(false); //await Task.Delay(200); //await printer.SelectFont(EpsonCommands.PrinterFont.A); //await Task.Delay(200); //await printer.PrintTextAsync("HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_HHHH_\n"); //await Task.Delay(200); //await printer.FeedLinesAsync(10); //await Task.Delay(1000); //await printer.SetQuadrupleMode(false); //await printer.PrintImageBitModeAsync("test.png",maxWidth:24); //await printer.LoadImageAsync("test.png", 100); //await printer.PrintLoadedImage(); //for (int i = 1; i < 5; i++) //{ // List lineBytes = new List(); // for (int j = 0; j < i; j++) // { // lineBytes.AddRange([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,]); // lineBytes.AddRange([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,]); // } // var bytes = EpsonCommands.CreateBitImageCommand(EpsonCommands.BitImageMode.SingleDensity8Dot, // lineBytes.ToArray(), i*16); // await printer.SendRawCommandAsync(bytes); // await printer.SendRawCommandAsync(EpsonCommands.LineFeed); //} //await printer.SetAbsolutePrintPosition(50); //await printer.SetFontSizeAsync(2, 2); //await printer.PrintTextAsync("Hello!"); //await printer.SendRawCommandAsync(EpsonCommands.LineFeed); //await printer.FeedLinesAsync(7); //await printer.PrintImageBitModeAsync("test.png"); //var bytes = EpsonCommands.CreateBitImageCommand(EpsonCommands.BitImageMode.SingleDensity8Dot, // [ // 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], 32); //await printer.SendRawCommandAsync(bytes); //await Task.Delay(2000); //await printer.PrintBuffer(); //var printer = new EpsonPrinter(); //await printer.ConnectAsync("127.0.0.1", 8888); //await printer.InitAsync(); //await printer.PrintTextAsync("Hello!"); //await printer.FeedLinesAsync(5); //await printer.CutAsync(); ////await CheckStatus(20); //Task CheckStatus(int iterations) //{ // return Task.Run(async () => // { // for (int i = 0; i < iterations; i++) // { // var status = await printer.GetPrinterStatusAsync(); // Console.WriteLine($"Printer Status: {status}"); // var paperStatus = await printer.GetPaperSensorStatusAsync(); // Console.WriteLine($"Paper Sensor Status: {paperStatus}"); // await Task.Delay(100); // } // }); //} //SoapEpsonPrinter printer = new SoapEpsonPrinter("10.0.20.11"); //SoapEpsonPrinter printer = new SoapEpsonPrinter("localhost:8888"); //var print = new SoapEpsonPrint(); //print // .AddTextAlign(SoapEpsonPrint.ALIGN_CENTER) // .AddTextSize(2, 2) // .AddText("It works! Finally!!!") // .AddFeed() // .AddFeed() // .AddFeed() // .AddCut(SoapEpsonPrint.CUT_FEED); //var task = await printer.Send(print); //var status = await printer.GetStatus(print); //Console.WriteLine($"Printer Status: {status}");