点矩阵收据打印 [英] Dot Matrix Receipt Printing

查看:64
本文介绍了点矩阵收据打印的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

朋友们,

现在,我尝试使用点矩阵收据打印机打印收据.在收据中,每个部分均应以不同的字体大小和两种不同的颜色打印.谁能帮我这个忙.



///< summary>
///打印取消的KOT订单.
///
///< param name ="connectionString"/>连接字符串.
///< param name ="orderDetailNumbers"/>订单明细号码.
///< param name ="userName"/>用户名.
///< returns>
///打印取消KOT订单
///
公共替代字符串PrintCancelKOTOrders(字符串connectionString,long [] orderDetailNumbers,字符串userName)
{
RawPrinterHelper receivePrinter = new RawPrinterHelper();

DataTable reportTable = new DataTable();
ReceiptFunction receiveFunction =新的ReceiptFunction();

reportTable = receiveFunction.GetCancelKOTNote(connectionString,orderDetailNumbers);

如果(reportTable.Rows.Count> 0)
{

int length = 0;
int foodDept = -1;
字符串printerName = string.Empty;
字符串companyName = reportTable.Rows [0] ["comName"].ToString();
int i = 0;
字符串displayString = string.Empty;
试试
{
foreach(reportTable.Rows中的DataRow行)
{
我+ = 1;

如果(foodDept!=(int)row ["FoodDpId"])
{
displayString + =订单号:" + reportTable.Rows [0] ["OrderId"].ToString().Trim()+"/" + row ["FoodDept"].ToString().Trim()+环境. NewLine;
displayString + =订购日期:" + DateTimeHelper.Now.Date.ToString("dd-MMM-yyyy")+" + DateTimeHelper.Now.ToString("HH:mm:ss")+ Environment.NewLine;
displayString + ="Table(s):" + reportTable.Rows [0] ["tableIds"].ToString().Trim()+"/Res No:" + row ["reservationId"].ToString().Trim ()+ Environment.NewLine;
displayString + =订单的取消者:" + reportTable.Rows [0] ["userName"].ToString().Trim()+ Environment.NewLine;
////displayString + = this.ColorSet("CANCELED")+ Environment.NewLine;

displayString + ="C物料数量" + Environment.NewLine;
displayString + ="----------------------------------------" + Environment.NewLine;
/////////Console.ForegroundColor = System.ConsoleColor.Red;
/////////Console.Write(displayString);

PrintDialog pd = new PrintDialog();
pd.PrinterSettings =新的PrinterSettings();
pd.PrintToFile = true;


receivePrinter.PrinterName = row ["PrinterName"].ToString();

this.Print(receiptPrinter,displayString);
this.StyleTester();
displayString = string.Empty;
}

字符串foodName = row ["Name"].ToString().Trim();
字符串foodQuantity = row ["Quantity"].ToString().Trim();
字符串coverNumber = row ["CoverNo"].ToString().Trim();

如果(coverNumber.Equals("0"))
{
coverNumber ="TB";
}
其他
{
coverNumber ="C" + coverNumber;
}

如果(Convert.ToInt32(foodQuantity)== -1)
{
foodName = row ["ItemName"].ToString().Trim();
}

长度=(31-foodName.Length);
如果(长度< 0)
{
长度= 0;
}

如果(foodName.Length< = 26)
{
if(row ["Quantity"].ToString().Trim().Length> 1)
{
displayString + =(coverNumber +" + foodName +" .PadLeft(length)+ foodQuantity + Environment.NewLine);
}
其他
{
displayString + =(coverNumber +" + foodName +" +" .PadLeft(length)+ foodQuantity + Environment.NewLine);
}
}
其他
{
int p = 0;
字符串strItemName = foodName;
int r = strItemName.Length%26;

while(strItemName.Substring(p,p + 26).长度> = 26)
{
if(row ["Quantity"].ToString().Trim().Length> 1)
{
displayString + = coverNumber +(" + strItemName.Substring(p,p + 26)+" +" .PadLeft(length)+ row ["Quantity"].ToString().Trim()+ Environment.NewLine) ;
}
其他
{
displayString + = coverNumber +(" + strItemName.Substring(p,p + 26)+" +" .PadLeft(length)+ row ["Quantity"].ToString().Trim()+ Environment.NewLine) ;
}

strItemName = strItemName.Substring(p + 26,strItemName.Length-26);

如果(strItemName.Length< 26)
{
displayString + =(" + strItemName + Environment.NewLine);
休息; //TODO:可能不正确.原是:退出Do
}

}

}

foodDept =(int)row ["FoodDpId"];

if(((reportTable.Rows.Count == i)||(row ["FoodDpId"]!= reportTable.Rows [i] ["FoodDpId"]))
{
this.Print(receiptPrinter,displayString);
displayString = string.Empty;
}

}

如果(reportTable.Rows [0] [备注"]!= null)
{
displayString + = Environment.NewLine;
displayString + =原因:" + reportTable.Rows [0] [备注"] .ToString().Trim()+ Environment.NewLine;
}

displayString = this.CutPrinterPaper(displayString);

this.Print(receiptPrinter,displayString);
displayString = string.Empty;

返回打印成功.";

}
catch(ex ex例外)
{
返回打印机错误!保存或用另一台打印机打印";
}
}
其他
{
返回没有记录.";
}
}

Hi friends,

Now I''ve tried to print a receipt using a Dot Matrix Receipt printer. In the receipt each and every section should be printed in a various font sizes and two different colors. Can anyone help me on this.



/// <summary>
/// Prints the cancel KOT orders.
///
/// <param name="connectionString" />The connection string.
/// <param name="orderDetailNumbers" />The order detail numbers.
/// <param name="userName" />Name of the user.
/// <returns>
/// Print Cancel KOT Orders
///
public override string PrintCancelKOTOrders(string connectionString, long[] orderDetailNumbers, string userName)
{
RawPrinterHelper receiptPrinter = new RawPrinterHelper();

DataTable reportTable = new DataTable();
ReceiptFunction receiptFunction = new ReceiptFunction();

reportTable = receiptFunction.GetCancelKOTNote(connectionString, orderDetailNumbers);

if (reportTable.Rows.Count > 0)
{

int length = 0;
int foodDept = -1;
string printerName = string.Empty;
string companyName = reportTable.Rows[0]["comName"].ToString();
int i = 0;
string displayString = string.Empty;
try
{
foreach (DataRow row in reportTable.Rows)
{
i += 1;

if (foodDept != (int)row["FoodDpId"])
{
displayString += "Order No : " + reportTable.Rows[0]["OrderId"].ToString().Trim() + "/" + row["FoodDept"].ToString().Trim() + Environment.NewLine;
displayString += "Order Date : " + DateTimeHelper.Now.Date.ToString("dd-MMM-yyyy") + " " + DateTimeHelper.Now.ToString("HH:mm:ss") + Environment.NewLine;
displayString += "Table(s) : " + reportTable.Rows[0]["tableIds"].ToString().Trim() + "/Res No: " + row["reservationId"].ToString().Trim() + Environment.NewLine;
displayString += "Order Canceled By: " + reportTable.Rows[0]["userName"].ToString().Trim() + Environment.NewLine;
////displayString += this.ColorSet(" CANCELLED ") + Environment.NewLine;

displayString += "C Item Quantity" + Environment.NewLine;
displayString += "----------------------------------------" + Environment.NewLine;
////////Console.ForegroundColor = System.ConsoleColor.Red;
////////Console.Write(displayString);

PrintDialog pd = new PrintDialog();
pd.PrinterSettings = new PrinterSettings();
pd.PrintToFile = true;


receiptPrinter.PrinterName = row["PrinterName"].ToString();

this.Print(receiptPrinter, displayString);
this.StyleTester();
displayString = string.Empty;
}

string foodName = row["Name"].ToString().Trim();
string foodQuantity = row["Quantity"].ToString().Trim();
string coverNumber = row["CoverNo"].ToString().Trim();

if (coverNumber.Equals("0"))
{
coverNumber = "TB";
}
else
{
coverNumber = "C" + coverNumber;
}

if (Convert.ToInt32(foodQuantity) == -1)
{
foodName = row["ItemName"].ToString().Trim();
}

length = (31 - foodName.Length);
if (length < 0)
{
length = 0;
}

if (foodName.Length <= 26)
{
if (row["Quantity"].ToString().Trim().Length > 1)
{
displayString += (coverNumber + " " + foodName + " ".PadLeft(length) + foodQuantity + Environment.NewLine);
}
else
{
displayString += (coverNumber + " " + foodName + " " + " ".PadLeft(length) + foodQuantity + Environment.NewLine);
}
}
else
{
int p = 0;
string strItemName = foodName;
int r = strItemName.Length % 26;

while (strItemName.Substring(p, p + 26).Length >= 26)
{
if (row["Quantity"].ToString().Trim().Length > 1)
{
displayString += coverNumber + (" " + strItemName.Substring(p, p + 26) + " " + " ".PadLeft(length) + row["Quantity"].ToString().Trim() + Environment.NewLine);
}
else
{
displayString += coverNumber + (" " + strItemName.Substring(p, p + 26) + " " + " ".PadLeft(length) + row["Quantity"].ToString().Trim() + Environment.NewLine);
}

strItemName = strItemName.Substring(p + 26, strItemName.Length - 26);

if (strItemName.Length < 26)
{
displayString += (" " + strItemName + Environment.NewLine);
break; // TODO: might not be correct. Was : Exit Do
}

}

}

foodDept = (int)row["FoodDpId"];

if ((reportTable.Rows.Count == i) || (row["FoodDpId"] != reportTable.Rows[i]["FoodDpId"]))
{
this.Print(receiptPrinter, displayString);
displayString = string.Empty;
}

}

if (reportTable.Rows[0]["Remarks"] != null)
{
displayString += Environment.NewLine;
displayString += "Reason : " + reportTable.Rows[0]["Remarks"].ToString().Trim() + Environment.NewLine;
}

displayString = this.CutPrinterPaper(displayString);

this.Print(receiptPrinter, displayString);
displayString = string.Empty;

return "Print success.";

}
catch (Exception ex)
{
return "Printer Error! Save or print this with another printer";
}
}
else
{
return "No records.";
}
}

/// <summary>

        /// Prints the specified receipt printer.
        /// </summary>
        /// <param name="receiptPrinter">The receipt printer.</param>
        /// <param name="printingText">The printing text.</param>
        private void Print(RawPrinterHelper receiptPrinter, string printingText)
        {
            this.isPrintThreadAborted = false;

            Thread printThread = new Thread(() => PrintOnThread(receiptPrinter, printingText));

            Thread timeoutThread = new Thread(() => TimeoutThread(printThread, 20000));

            printThread.Start();

            timeoutThread.Start();

            printThread.Join();

            if (timeoutThread.IsAlive)
            {
                timeoutThread.Abort();
            }

            // check if the printing has timed out
            if (this.isPrintThreadAborted)
            {
                throw new TimeoutException("Printing has timed out");
            }
        }

        private void PrintOnThread(RawPrinterHelper receiptPrinter, string printingText)
        {
            if (!receiptPrinter.Open("Test Page"))
            {
                receiptPrinter.Open("Test Page");
            }

            receiptPrinter.Print(printingText);
            ////receiptPrinter.Print("ESC GS *2");
            receiptPrinter.Close();
        }

        private void TimeoutThread(Thread threadToTimeout, int timeout)
        {
            Thread.Sleep(timeout);

            if (threadToTimeout.IsAlive)
            {
                threadToTimeout.Abort();

                this.isPrintThreadAborted = true;
            }
        }

        /// <summary>
        /// Colors the set.
        /// </summary>
        /// <param name="stringField">The string field.</param>
        /// <returns>Color Set</returns>
        private string ColorSet(string stringField)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(stringField);

            return stringField;

        }



我尝试了ColorSet方法来更改文本的颜色.我没用.

有人可以帮我吗?

在此先谢谢您



I''ve tried the ColorSet method to change the color of the text. I it didn''t work.

Can anyone help me on this?

Thanks in advance

推荐答案

您正尝试发送本机原始打印机命令,因此请转到打印机用户手册并了解目标打印机支持的命令语言.可能是ESC/POS
因此,去学习使用什么ESC/POS命令来设置字体大小和颜色.
您的ColorSet方法没有意义!!!它正在设置与目标打印机不相关或不相关的Console对象.
You''re trying to send native raw printer commands so go to the printer user manual and learn the command language your target printer supports that it''s likely to be ESC/POS
So go and learn what ESC/POS command is used to set font sizes and color.
Your ColorSet method does not make sense!!! it is setting up the Console object that is not related nor associated to the target printer.


我已经有了一些转义码,并且可以正常工作.

I''ve got some escape codes and those working fine.

/// <summary>
        /// Prints the on thread.
        /// </summary>
        /// <param name="receiptPrinter">The receipt printer.</param>
        /// <param name="printingText">The printing text.</param>
        /// <param name="isLargeText">if set to <c>true</c> [is large text].</param>
        private void PrintOnThread(RawPrinterHelper receiptPrinter, string printingText, bool isLargeText, bool isRedFont)
        {
            if (!receiptPrinter.Open("Test Page"))
            {
                receiptPrinter.Open("Test Page");
            }

            string prefix = string.Empty; ////Convert.ToChar(27) + "@";
            string suffix = string.Empty;

            if (isLargeText)
            {
                prefix += Convert.ToChar(27) + "!" + Convert.ToChar(16) + Convert.ToChar(0x1d) + "b" + Convert.ToChar(1);
                suffix += Convert.ToChar(0x1d) + "b" + Convert.ToChar(0) + Convert.ToChar(27) + "!" + Convert.ToChar(0);
            }

            if (isRedFont)
            {

                prefix += Convert.ToChar(27) + "r" + Convert.ToChar(1);
                suffix = Convert.ToChar(27) + "r" + Convert.ToChar(0) + suffix;
            }

            receiptPrinter.Print(prefix + printingText + suffix);
            receiptPrinter.Close();
        }



///< summary>
///打印on线程.
///</summary>
///< param name ="receiptPrinter">收据打印机.</param>
///< param name ="printingText">打印文本.</param>
///< param name ="isLargeText">如果设置为< c> true</c> [是大字体].</param>
私有void PrintOnThreadNewFont(RawPrinterHelper receivePrinter,字符串printingText,bool isDifferenFont)
{
如果(!receiptPrinter.Open(测试页"))
{
receivePrinter.Open(测试页");
}

字符串前缀= string.Empty; ////Convert.ToChar(27)+"@";
字符串后缀= string.Empty;

如果(isDifferenFont)
{
前缀+ = Convert.ToChar(27)+!" + Convert.ToChar(33)+ Convert.ToChar(0x1d)+"b" + Convert.ToChar(1);
后缀+ = Convert.ToChar(0x1d)+"b" + Convert.ToChar(0)+ Convert.ToChar(27)+!" + Convert.ToChar(0);
}

receivePrinter.Print(前缀+ printingText +后缀);
receivePrinter.Close();
}




无论如何,感谢您的想法和时间.



/// <summary>
/// Prints the on thread.
/// </summary>
/// <param name="receiptPrinter">The receipt printer.</param>
/// <param name="printingText">The printing text.</param>
/// <param name="isLargeText">if set to <c>true</c> [is large text].</param>
private void PrintOnThreadNewFont(RawPrinterHelper receiptPrinter, string printingText, bool isDifferenFont)
{
if (!receiptPrinter.Open("Test Page"))
{
receiptPrinter.Open("Test Page");
}

string prefix = string.Empty; ////Convert.ToChar(27) + "@";
string suffix = string.Empty;

if (isDifferenFont)
{
prefix += Convert.ToChar(27) + "!" + Convert.ToChar(33) + Convert.ToChar(0x1d) + "b" + Convert.ToChar(1);
suffix += Convert.ToChar(0x1d) + "b" + Convert.ToChar(0) + Convert.ToChar(27) + "!" + Convert.ToChar(0);
}

receiptPrinter.Print(prefix + printingText + suffix);
receiptPrinter.Close();
}




Anyway thanks for your ideas and time.


一个非常现成的解决方案:

如果您使用的是.NET
以及是否有用于点矩阵打印机的驱动程序

使用2D绘图工具创建收据.

这实际上是用图形类处理的颜色和字体打印图形,然后您可以使用任何字体而不必担心打印机支持的字体.使用驱动程序进行颜色处理也应该起作用.

但是,这对您的可用资源做出了很多假设.
A very off-the-cuff solution:

If you''re using .NET
and if you have a driver for the dot-matrix printer

Use the 2D Drawing tools to create your receipt.

This is, effectively, printing a drawing with the colors and fonts handled by the drawing classes and you can then use any fonts without worrying about those supported by the printer. Color handling, with the driver, should also work.

But, this makes a lot of assumptions about what you''ve available.


这篇关于点矩阵收据打印的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆