Files
Print_server/EpsonTest/Program.cs
2026-01-22 11:13:07 +01:00

699 lines
20 KiB
C#

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 = @"
//<?xml version=""1.0"" encoding=""UTF-8""?>
//<epos-print xmlns=""http://www.epson-pos.com/schemas/2011/03/epos-print"">
// <text>Hello, World!</text>
//<feed />
//<feed />
//</epos-print>";
//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<SplitPaymentInfo>
{
new SplitPaymentInfo { PaymentMethod = "Cash", Amount = 50.00m, Currency = "CHF"},
new SplitPaymentInfo { PaymentMethod = "Card", Amount = 110.00m, Currency = "CHF" }
},
TerminalReceipts = new List<PaymentTerminalReceipt>
{
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<FinalReceipt>(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<string> { "Wasabi" },
// Added = new List<string> { "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<string> { "Onion" },
// Added = new List<string> { "Extra Sauce" }
// },
// Comment = "Medium rare"
//});
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco")
//{
// Modifications = new DishModifications
// {
// Added = new List<string> { "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<KitchenReceipt>(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<string> { "Wasabi" },
// Added = new List<string> { "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<string> { "Onion" },
// Added = new List<string> { "Extra Sauce" }
// },
// Comment = "Medium rare"
//});
//receipt.Gangs[0].Dishes.Add(new Dish(1, "Salmon Taco")
//{
// Modifications = new DishModifications
// {
// Added = new List<string> { "Extra Lime" }
// }
//});
//// Add additional info
//var serializedReceipt = JsonSerializer.Serialize(receipt, new JsonSerializerOptions { WriteIndented = true });
//var deserializedReceipt = JsonSerializer.Deserialize<KitchenReceipt>(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<OrderItem>
// {
// new OrderItem
// {
// Number = 1,
// Name = "pappara",
// Quantity = 1,
// SubItems = new List<string> { "pizza", "cola" },
// Comment = "Cola zero please"
// },
// new OrderItem
// {
// Number = 2,
// Name = "Classic Beef Burger",
// Quantity = 1,
// Modifications = new ItemModifications
// {
// Removed = new List<string> { "Onion" },
// Added = new List<string> { "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<OrderItemsReceipt>(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<KitchenItem>
// {
// 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<byte> lineBytes = new List<byte>();
// 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}");