【问题标题】:Point of Sale Application Receipt Printing销售点申请收据打印
【发布时间】:2011-09-13 12:50:36
【问题描述】:

我正在开发一个零售管理软件的小项目,该软件将使用 POS 打印机(我认为这就是我们所说的)。我最终需要为它创建一个账单。但我被困在这里,无法继续。因此,假设我以适当尺寸(POS 账单宽度)的单独表格生成我的账单,我能正确打印它吗? 我正在使用 C# 和 .NET 4.0 框架。我对POS设备了解不多。我正在为一个需要基本软件模型的小型本地客户工作。我也是新手,请帮帮我。

如果我的问题不清楚,请告诉我,我会尽力阐述我的想法。

【问题讨论】:

  • 您知道,POS == 销售点
  • 这是一个相当大的问题,通过 POS 打印机创建可打印的收据并非易事。您可能应该先在 Google 上搜索一下,因为 StackOverflow 是针对特定的编程问题的。
  • @jadarnel27:你可以这么说,我只知道这一点,并且对 WEPOS 有一些了解
  • 第一个任务应该是获取 POS 设备的手册,从我与收据打印机的有限接触来看,您通常必须深入系统内部才能正确打印。不幸的是,它不像在 A4 纸上打印。
  • @user815600,我认为打印会更容易,如果您以控制台应用程序格式(我的意思是在命令提示符窗口中)输出账单,然后尝试从那里打印。您将需要客户的打印机进行演示打印,然后为以后生成的账单修复格式,但这只是我的意见:)

标签: c# point-of-sale


【解决方案1】:

我知道这是一篇旧帖子,但对于那些仍在寻找解决方案的人,我可以告诉你我做了什么。

在 .Net 的 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

 }

希望它可以帮助某人跳过自定义驱动程序的所有麻烦。 :)

【讨论】:

    【解决方案2】:

    好吧,我设计了一个 POS 应用程序(在 Delphi 中),尽管打印收据或账单有很多小问题,但这不是火箭科学。我只是简单地打印收据,嗯,打印就像任何其他打印机一样,不同之处在于您发送 30-38 个字符长的行(取决于打印机驱动程序、字体和大小)。首先,您可以使用 2 种方法进行打印:发送 Ascii 字符和发送打印机命令(设置字体样式、颜色等)为该特定打印机,或者第二种方法是使用 C# 设置字体、大小等,例如打印到任何其他普通/桌面打印机。

    您可以尝试按照页面示例和我的建议进行打印: http://ondotnet.com/pub/a/dotnet/2002/06/24/printing.html

    【讨论】:

    • 很高兴收到您的回复 Luis。让我通过它。如果每件事都没有按计划进行,我们会发表评论
    猜你喜欢
    • 2019-01-09
    • 2012-12-15
    • 2011-10-15
    • 1970-01-01
    • 2021-04-28
    • 2022-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多