Печать C # OPOS рядом с растровым изображением на повернутой квитанции - PullRequest
0 голосов
/ 07 сентября 2018

Эта проблема касается теплового чекового принтера. Я загрузил примеры печати чеков C # EPSON OPOS, пытаясь внедрить такой принтер в моем текущем проекте, все работает хорошо, но когда я печатаю растровый логотип, под ним печатается следующий текст, и мне нужно напечатать некоторый текст на правая сторона этого. Вот пример того, что он делает сейчас: Before Вот что мне нужно сделать: After Мой текущий код, в основном из примеров EPSON:

private void btnReceipt_Click(object sender, System.EventArgs e)
{
    //<<<step8>>>--Start
    //Initialization
    DateTime nowDate = DateTime.Now;                            //System date
    DateTimeFormatInfo dateFormat = new DateTimeFormatInfo();   //Date Format
    dateFormat.MonthDayPattern = "MMMM";
    string strDate = nowDate.ToString("MMMM,dd,yyyy  HH:mm",dateFormat);
    int iRecLineSpacing;
    int iRecLineHeight;
    bool bBuffering = true;

    bool bBitmapPrint = false;
    int iPrintRotation = 0;


    string strCurDir = Directory.GetCurrentDirectory();
    string strFilePath = strCurDir.Substring(0, 
    strCurDir.LastIndexOf("Step8") + "Step8\\".Length);
    strFilePath += "bitmap_logo.bmp";


    Cursor.Current = Cursors.WaitCursor;

    Rotation[] arBitmapRotationList = m_Printer.RecBitmapRotationList;
    Rotation[] arBarcodeRotationList = m_Printer.RecBarCodeRotationList;

    //Check rotate bitmap
    for (int i = 0; i < arBitmapRotationList.Length; i++)
    {
        if (arBitmapRotationList[i].Equals(Rotation.Left90))
        {
            bBitmapPrint = true;
            iPrintRotation = (iPrintRotation | (int)PrintRotation.Left90)
                | ((int)PrintRotation.Bitmap);
        }
    }

    iRecLineSpacing = m_Printer.RecLineSpacing;
    iRecLineHeight = m_Printer.RecLineHeight;

    if (m_Printer.CapRecPresent == true)
    {
        try
        {
            m_Printer.TransactionPrint(PrinterStation.Receipt, PrinterTransactionControl.Transaction);

            m_Printer.RotatePrint(PrinterStation.Receipt, (PrintRotation)iPrintRotation);


            if (bBitmapPrint == true)
            {
                m_Printer.PrintBitmap(PrinterStation.Receipt, strFilePath, m_Printer.RecLineWidth, PosPrinter.PrinterBitmapCenter);
            }

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|4C" + "\u001b|bC" + "   Receipt     ");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|3C" + "\u001b|2uC" + "       Mr. Brawn\n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|2uC" + "                                                  \n\n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|2uC" + "\u001b|3C" + "        Total payment              $" +"\u001b|4C" + "21.00  \n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|1C\n" );

            m_Printer.PrintNormal(PrinterStation.Receipt,strDate + " Received\n\n");

            m_Printer.RecLineHeight = 24;
            m_Printer.RecLineSpacing = m_Printer.RecLineHeight;

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|uC" + " Details               \n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|1C" + "                          " + "\u001b|2C" + "OPOS Store\n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|uC" + " Tax excluded    $20.00\n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|1C" + "                          " + "\u001b|bC" + "Zip code 999-9999\n");

            m_Printer.PrintNormal(PrinterStation.Receipt,"\u001b|uC" + " Tax(5%)        $1.00" + "\u001b|N" + "    Phone#(9999)99-9998\n");
        }
        catch(PosControlException ex)
        {
            if(ex.ErrorCode == ErrorCode.Illegal && ex.ErrorCodeExtended == 1004)
            {
                MessageBox.Show("Unable to print receipt.\n", "Printer_SampleStep8", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                // Clear the buffered data since the buffer retains print data when an error occurs during printing.
                m_Printer.ClearOutput();
                bBuffering = false;
            }
        }

        try
        {
            m_Printer.RotatePrint(PrinterStation.Receipt, PrintRotation.Normal);

            if(bBuffering == true)
            {
                m_Printer.PrintNormal(PrinterStation.Receipt, "\u001b|fP");
            }

            m_Printer.TransactionPrint(PrinterStation.Receipt, PrinterTransactionControl.Normal);
        }
        catch(PosControlException)
        {
            // Clear the buffered data since the buffer retains print data when an error occurs during printing.
            m_Printer.ClearOutput();
        }
    }

    m_Printer.RecLineSpacing = iRecLineSpacing;
    m_Printer.RecLineHeight = iRecLineHeight;
    Cursor.Current = Cursors.Default;
    //<<<step8>>>--End
}

Если есть метод для абсолютного позиционирования текста или возможности записи в ту же строку, где находится растровое изображение, это решило бы мою проблему. Любые направления приветствуются!

1 Ответ

0 голосов
/ 07 сентября 2018

Пожалуйста, спросите EPSON, можете ли вы печатать с нужным макетом с одним набором RotatePrint.

В качестве альтернативы, рассмотрите возможность разделения его на два набора RotatePrint.

Если вы сначала установитеRotatePrint с растровым изображением и «Некоторым другим текстом», а второй набор RotatePrint с «Образцом текста 1» - «Образцом текста 3», он будет близок к нужному макету.


Вдобавление:

Epson OPOS, кажется, поддерживает PageMode, так что вы можете его напечатать?

Что касается объяснения японского , пожалуйста, посмотрите перевод Google и т. д.

...