0

这个问题涉及热敏收据打印机。我已经下载了 C# EPSON OPOS 收据打印示例,试图在我当前的项目中实现这样的打印机,一切正常,但是当我打印位图徽标时,正在其下打印连续的文本,我需要打印一些文本到它的右侧。这是它现在所做的近似: 前 这是我需要它做的: 后 我当前的代码,几乎与 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
}

如果有一种方法可以进行绝对文本定位或能够写入位图所在的同一行,它将解决我的问题。任何方向表示赞赏!

4

1 回答 1

1

请询问 EPSON 是否可以使用一组 RotatePrint 以您想要的布局进行打印。

作为替代方案,可以考虑将其分成两组 RotatePrint。

如果您首先使用 Bitmap 和“Some other text”设置 RotatePrint,然后使用“Sample text 1”到“Sample text 3”设置第二组 RotatePrint,它将接近您想要的布局。


此外:

Epson OPOS好像支持PageMode,可以打印吗?

至于日语的解释,请看谷歌翻译等。

于 2018-09-07T17:45:09.040 回答