我正在开发一个零售管理软件的小项目,它将使用POS打印机(我认为这就是我们所说的)。我最终需要为它创建一个账单。但我被困在这里,无法继续。因此,如果我以具有适当尺寸(POS票据宽度)的单独形式生成我的账单,我能够正确打印吗? 我正在使用C#和.NET 4.0框架。我对POS设备知之甚少。我正在为一个需要基本软件模型的小型本地客户工作。我也是一个新鲜的,所以请帮助我。
如果我的问题不明确,请告诉我,我会试着详细说明我的想法。
答案 0 :(得分:2)
我知道这是一个老帖子,但对于那些仍在寻找解决方案的人,我可以告诉你我做了什么。
在花了几个小时搞乱.OS的OPOS和POS之后,我最后放弃了那些并且只使用了内置的System.Drawing.Printing库。用于.Net的OPOS和POS最终成为一种痛苦的工作,并最终没有内置库。
我使用的是Epson TM-T20II收据打印机。
这里有一些适合我的代码。
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
}
希望它有助于有人跳过所有使用自定义驱动程序的麻烦。 :)
答案 1 :(得分:1)
我设计了一个POS应用程序(在Delphi中),尽管打印收据或账单有很多小问题,但这并不是火箭科学。我只是简单地打印收据,好像打印任何其他打印机一样,区别在于您发送30-38个字符长的行(取决于打印机驱动程序,字体和大小)。首先,您可以使用2种方法进行打印:发送Ascii字符并发送打印机命令(设置字体样式,颜色等),或者第二种方法是使用C#设置字体,大小等,如打印到任何其他普通/桌面打印机。
您可以按照页面示例和我的建议尝试打印: http://ondotnet.com/pub/a/dotnet/2002/06/24/printing.html