Печать квитанции заявления о продаже - PullRequest
1 голос
/ 13 сентября 2011

Я работаю над небольшим проектом для ПО для управления розничной торговлей, в котором будет использоваться POS-принтер (думаю, так мы его называем).Мне нужно создать счет для этого в конце.Но я застрял здесь и не могу продолжать.Итак, предположим, что если я сгенерирую свой счет в отдельной форме с соответствующими размерами (шириной счетов POS), смогу ли я распечатать его правильно?Я использую C # и .NET 4.0 Framework.Я не очень разбираюсь в POS-устройствах.Я работаю для действительно небольшого локального клиента, которому нужна базовая модель программного обеспечения.Я также более свежий, поэтому, пожалуйста, помогите мне.

Если мой вопрос не ясен, дайте мне знать, что я попытаюсь развить мою мысль.

Ответы [ 2 ]

2 голосов
/ 27 ноября 2014

Я знаю, что это старый пост, но для тех, кто все еще ищет решение, я могу рассказать вам, что я сделал.

После многих часов работы с OPOS и POS для .Net я просто отказался от них и просто использовал встроенные библиотеки System.Drawing.Printing.OPOS и POS для .Net оказались очень трудными для работы и в конечном итоге не работали так же хорошо, как встроенные библиотеки.

Я использую чековый принтер 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 голос
/ 17 сентября 2011

Ну, я разработал приложение для POS (в Delphi), и хотя есть много маленьких проблем с печатью квитанции или счета, это не ракетостроение. Я просто печатаю квитанцию, просто печатая как любой другой принтер, разница в том, что вы отправляете строки длиной 30-38 символов (в зависимости от драйвера принтера, шрифта и размера). Для начала вы можете печатать, используя 2 метода: отправка символов Ascii и отправка команд принтера (для установки стиля шрифта, цвета и т. Д.) Для этого конкретного принтера, или второй способ - установить шрифт, размер и т. Д. С помощью печати на C #, например, любой другой обычный / настольный принтер.

Вы можете попробовать распечатать, следуя примеру страницы и моим предложениям: http://ondotnet.com/pub/a/dotnet/2002/06/24/printing.html

...