Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

POS Application Development - Receipt Printing

Tags:

I've been building a POS application for a restaurant/bar.
The design part is done and for the past month I've been coding it.
Everything works fine except now I need to print. I have to print to a receipt printer connected to the computer running the software and later I'll try to print in a remote printer like a kitchen one.

I've searched for help in the matter only to find that the standard for printing in these types of printers is using POS for .NET. The thing is, this is now a bit outdated or at least it hasn't had any updates since a couple of years. There's a lot of questions being asked on how to use this library and most of the answers aren't quite easy to follow. So if anybody could give a step by step help on printing like a simple phrase ("Hello World") on a receipt printer i would be very grateful.
I'm using visual studio 2012 running on a 64 bit windows 7 and i'm coding WPF in c#.

like image 713
Nuno Avatar asked Nov 15 '12 01:11

Nuno


People also ask

What is a POS receipt?

A point of sale (PoS) receipt printer is a critical device in point of sale system, typically used in retail environments to print credit card slips and customer receipts. In layman's terms, point-of-sale (PoS) printers are typically used to provide the transcript of the transactions such as tickets and sales receipts.

Which printer is used in POS?

The most common receipt printer for point of sale systems is the thermal printer, which most major retailers use. The receipts are printed on a long roll of paper, i.e. the famously long CVS receipts. Thermal printers use thermochromic, or thermal, paper, that will turn black when heat is applied to it.


1 Answers

I know this is an old post, but for those still looking for a solution, I can tell you what I did.

After spending many hours messing with OPOS and POS for .Net, I ended up just abandoning those and just using the built-in System.Drawing.Printing libraries. The OPOS and POS for .Net ended up being a pain to get working and ultimately didn't work as well as the built-in libraries.

I'm using an Epson TM-T20II receipt printer.

Here's some code that worked well for me.

public static void PrintReceiptForTransaction() {     PrintDocument recordDoc = new PrintDocument();      recordDoc.DocumentName = "Customer Receipt";     recordDoc.PrintPage += new PrintPageEventHandler(ReceiptPrinter.PrintReceiptPage); // function below     recordDoc.PrintController = new StandardPrintController(); // hides status dialog popup                                                                 // Comment if debugging      PrinterSettings ps = new PrinterSettings();     ps.PrinterName = "EPSON TM-T20II Receipt";     recordDoc.PrinterSettings = ps;     recordDoc.Print();     // --------------------------------------      // Uncomment if debugging - shows dialog instead     //PrintPreviewDialog printPrvDlg = new PrintPreviewDialog();     //printPrvDlg.Document = recordDoc;     //printPrvDlg.Width = 1200;     //printPrvDlg.Height = 800;     //printPrvDlg.ShowDialog();     // --------------------------------------      recordDoc.Dispose(); }  private static void PrintReceiptPage(object sender, PrintPageEventArgs e) {     float x = 10;     float y = 5;     float width = 270.0F; // max width I found through trial and error     float height = 0F;      Font drawFontArial12Bold = new Font("Arial", 12, FontStyle.Bold);     Font drawFontArial10Regular = new Font("Arial", 10, FontStyle.Regular);     SolidBrush drawBrush = new SolidBrush(Color.Black);      // Set format of string.     StringFormat drawFormatCenter = new StringFormat();     drawFormatCenter.Alignment = StringAlignment.Center;     StringFormat drawFormatLeft = new StringFormat();     drawFormatLeft.Alignment = StringAlignment.Near;     StringFormat drawFormatRight = new StringFormat();     drawFormatRight.Alignment = StringAlignment.Far;      // Draw string to screen.     string text = "Company Name";     e.Graphics.DrawString(text, drawFontArial12Bold, drawBrush, new RectangleF(x, y, width, height), drawFormatCenter);     y += e.Graphics.MeasureString(text, drawFontArial12Bold).Height;      text = "Address";     e.Graphics.DrawString(text, drawFontArial10Regular, drawBrush, new RectangleF(x, y, width, height), drawFormatCenter);     y += e.Graphics.MeasureString(text, drawFontArial10Regular).Height;      // ... and so on } 

Hopefully it helps someone skip all the messing around with custom drivers. :)

like image 128
Tim S Avatar answered Sep 22 '22 05:09

Tim S