zoukankan      html  css  js  c++  java
  • TM220B票据打印[原创]

    主要是通过XML文件做模板来实现打印;
    模板如下:

     1<?xml version="1.0" encoding="utf-8" ?>
     2<!--
     3说明:
     4justification 
     5center  中间对齐
     6right   右对齐
     7left    左对齐
     8style
     90 正常
    101 倍宽
    112 倍高
    123 四倍角
    13
    14color
    150 黑色
    161 红色
    17-->
    18<root>
    19  <template id="OCT01" name="一卡通储值卡发卡凭证">
    20    <title text="一卡通发卡凭证" style="2" color="0" justification="center"/>
    21    <body> 
    22      <item text="用户卡号:" value="CardSerialNumber"  style="0" color="0"></item>
    23      <item text="卡片类型:" value="productName"  style="0" color="0"></item>
    24      <item text="卡有效期:" value="productValidityEndDate"  style="0" color="0"></item>
    25      <item text="发卡押金:" value="carddepositvalue"  style="0" color="0"></item>
    26      <item text="交易时间:" value="transactionTime"  style="0" color="0"></item>
    27      <item text="网点编号:" value="NetStationID"  style="0" color="1"></item>
    28      <item text="操作员ID:" value="staffId" style="0" color="0"></item>
    29    </body>
    30  </template>  
    31  <template id="OCT02" name="一卡通储值卡发卡凭证">
    32    <title text="充值凭证" style="2" color="0" justification="center"/>
    33    <body>
    34      <item text="用户卡号:" value="CardSerialNumber"  style="0" color="0"></item>
    35      <item text="卡片类型:" value="productName"  style="0" color="0"></item>
    36      <item text="卡有效期:" value="productValidityEndDate"  style="0" color="0"></item>
    37      <item text="充值前余额:" value="balance2"  style="0" color="0"></item>
    38      <item text="充值金额:" value="revalue"  style="0" color="0"></item>
    39      <item text="充值后金额:" value="balance"  style="0" color="0"></item>
    40      <item text="交易时间:" value="transactionTime"  style="0" color="0"></item>
    41      <item text="网点编号:" value="NetStationID"  style="0" color="0"></item>
    42      <item text="操作员ID:" value="staffId" style="0" color="0"></item>
    43    </body>
    44  </template>
    45
    46
    47  <template id="ACC01" name="一票通储值卡发卡凭证">
    48    <title text="一票通发卡凭证" style="2" color="0" justification="center"/>
    49    <body>
    50      <item text="用户卡号:" value="otherCardSerialNumber"  style="0" color="0"></item>
    51      <item text="车票种类:" value="productName"  style="0" color="0"></item>
    52      <item text="卡有效期:" value="ValidityEndDate"  style="0" color="0"></item>
    53      <item text="发卡押金:" value="carddepositvalue"  style="0" color="0"></item>
    54      <item text="交易时间:" value="transactionTime"  style="0" color="0"></item>
    55      <item text="车站名称:" value="stationName"  style="0" color="0"></item>
    56      <item text="设备编号:" value="deviceId"  style="0" color="0"></item>
    57      <item text="操作员ID:" value="staffId" style="0" color="0"></item>
    58    </body>
    59  </template>
    60  <template id="ACC02" name="一票通储值卡发卡凭证">
    61    <title text="充值凭证" style="2" color="0" justification="center"/>
    62    <body>
    63      <item text="用户卡号:" value="otherCardSerialNumber"  style="0" color="0"></item>
    64      <item text="车票种类:" value="productName"  style="0" color="0"></item>
    65      <item text="卡有效期:" value="ValidityEndDate"  style="0" color="0"></item>
    66      <item text="充值前金额:" value=""  style="0" color="0"></item>
    67      <item text="充值金额:" value=""  style="0" color="0"></item>
    68      <item text="充值后金额:" value=""  style="0" color="0"></item>
    69      <item text="交易时间:" value="transactionTime"  style="0" color="0"></item>
    70      <item text="车站名称:" value="stationName"  style="0" color="0"></item>
    71      <item text="设备编号:" value="deviceId"  style="0" color="0"></item>
    72      <item text="操作员ID:" value="staffId" style="0" color="0"></item>
    73    </body>
    74  </template>
    75</root>

    一、创建的打印类:Printer.cs

     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4using System.IO.Ports;
     5
     6namespace BOM.NewUI.PrinterManager
     7{
     8    /// <summary>
     9    /// 打印机
    10    /// </summary>

    11    public class Printer
    12    {
    13        /// <summary>
    14        /// 获取打印机状态
    15         /// </summary>
    16        /// <param name="sp">SerialPort对象</param>
    17        /// <param name="buffer">指令</param>
    18        /// <returns>状态代码</returns>

    19        private int GetState(SerialPort sp, byte[] buffer)
    20        {
    21            sp.Write(buffer, 0, buffer.Length);
    22            return sp.ReadChar();
    23        }

    24        /// <summary>
    25        /// 开钱箱
    26         /// </summary>
    27        /// <returns>是否打开</returns> 

    28        public static bool OpenMoneyBox()
    29        {
    30            bool result = false;            
    31            SerialPort sp = CreateSerialPort("票据打印机");
    32            try
    33            {                
    34                if (!sp.IsOpen)
    35                    sp.Open();
    36                WriteData(sp, PrinterCommand.CMD_OPENMONEYBOX);
    37           //     sp.Write(new byte[] { 0x1B, 0x70, 0x30, 0x20, 0xF6 }, 0, 5);
    38                sp.DiscardOutBuffer();
    39                sp.Close();
    40                result = true;
    41            }

    42            catch
    43            {
    44                throw;
    45            }

    46            return result;
    47        }

    48        /// <summary>
    49        /// 创建串口对象
    50         /// </summary>
    51        /// <param name="portName"></param>
    52        /// <returns></returns>

    53        public static SerialPort CreateSerialPort(string portName)
    54        {
    55            ConfigManager config = new ConfigManager();
    56            SerialPortInfo info = config.GetConfig(portName);
    57            SerialPort sp = new SerialPort(info.portName, info.baudRate, info.parity, info.dataBits, info.stopBits);
    58            sp.ReadTimeout = 1000;
    59            if (!sp.IsOpen)
    60                sp.Open();
    61            return sp;
    62        }

    63
    64        /// <summary>
    65        /// 向串口写数据
    66         /// </summary>
    67        /// <param name="sp">SerialPort对象</param>
    68        /// <param name="buffer">数据</param>

    69        public static void WriteData(SerialPort sp, byte[] buffer)
    70        {
    71            sp.Write(buffer, 0, buffer.Length);
    72        }

    73        /// <summary>
    74        /// 票据打印
    75         /// </summary>
    76        /// <param name="sp">SerialPort对象</param>
    77        /// <param name="templateID">票据模板编号</param>

    78        public static void Print(SerialPort sp,string templateID)
    79        {
    80            Template t = new Template();
    81            t.Print(sp, templateID);
    82        }
            
    83    }

    84}

    85
     二、PrinterCommand.cs类
     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4
     5namespace BOM.NewUI.PrinterManager
     6{
     7    /// <summary>
     8    /// 打印机指令
     9    /// </summary>

    10    public abstract class PrinterCommand
    11    {
    12        /// <summary>
    13        /// 打印机初始化
    14         /// </summary>

    15        public static byte[] CMD_INIT = new byte[] 0x1b0x40 };
    16
    17        /// <summary>
    18        /// 居右
    19         /// </summary>

    20        public static byte[] CMD_RIGHT = new byte[] {0x1b,0x61,0x02 };
    21
    22        /// <summary>
    23        /// 居左
    24         /// </summary>

    25        public static byte[] CMD_LEFT = new byte[] 0x1b0x610x00 };
    26
    27        /// <summary>
    28        /// 居中
    29         /// </summary>

    30        public static byte[] CMD_CENTER = new byte[] 0x1b0x610x01 };
    31
    32        /// <summary>
    33        /// 倍高and倍宽
    34         /// </summary>

    35        public static byte[] CMD_DOUBLEHEIGHTANDDOUBLEWIDTH = new byte[] 0x1c0x210x0c };
    36
    37        /// <summary>
    38        /// 倍宽
    39         /// </summary>

    40        public static byte[] CMD_DOUBLEWIDTH  = new byte[] 0x1c0x210x04 };
    41
    42        /// <summary>
    43        /// 倍高
    44         /// </summary>

    45        public static byte[] CMD_DOUBLEHEIGHT = new byte[] 0x1c0x210x08 };
    46
    47        /// <summary>
    48        /// 恢复正常
    49         /// </summary>

    50        public static byte[] CMD_NORMAL = new byte[] 0x1c0x210x00 };
    51
    52        /// <summary>
    53        /// 进纸一行
    54         /// </summary>

    55        public static byte[] CMD_NEWLINE = new byte[] 0x0a };
    56
    57        /// <summary>
    58        /// 开钱箱
    59         /// </summary>

    60        public static byte[] CMD_OPENMONEYBOX = new byte[] 0x1B0x700x300x200xF6 };
    61
    62        /// <summary>
    63        /// 获取打印机状态
    64         /// </summary>

    65        public static byte[] CMD_STATUS = new byte[] 0x100x040x01 };
    66
    67        /// <summary>
    68        /// 选择打印颜色红色
    69         /// </summary>

    70        public static byte[] CMD_COLOR_RED = new byte[] 0x1B0x720x01 };
    71
    72        /// <summary>
    73        /// 选择打印颜色黑色
    74         /// </summary>

    75        public static byte[] CMD_COLOR_BLACK = new byte[] 0x1B0x720x00 };       
    76    }

    77}

    78

    三、串口类SerialPortInfo.cs
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using System.IO.Ports;
      5
      6namespace BOM.NewUI.PrinterManager
      7{
      8    public class SerialPortInfo
      9    {
     10        private string m_printerType;
     11        private string m_portType;
     12        private string m_portName;
     13        private int m_baudRate;
     14        private Parity m_parity;
     15        private int m_dataBits;
     16        private StopBits m_stopBits;
     17
     18        public SerialPortInfo()
     19        {
     20        }

     21        public SerialPortInfo(string _printerType,string _portType,string _portName, int _baudRate, Parity _parity, int _dataBits, StopBits _stopBits)
     22        {
     23            this.m_printerType = _printerType;
     24            this.m_portType = _portType;
     25            this.m_portName = _portName;
     26            this.m_baudRate = _baudRate;
     27            this.m_parity = _parity;
     28            this.m_dataBits = _dataBits;
     29            this.m_stopBits = _stopBits;
     30        }

     31
     32        public string printerType
     33        {
     34            set
     35            {
     36                this.m_printerType = value;
     37            }

     38            get
     39            {
     40                return this.m_printerType;
     41            }

     42        }

     43        public string portType
     44        {
     45            set
     46            {
     47                this.m_portType = value;
     48            }

     49            get
     50            {
     51                return this.m_portType;
     52            }

     53        }

     54        public string portName
     55        {
     56            set
     57            {
     58                this.m_portName = value;
     59            }

     60            get
     61            {
     62                return this.m_portName;
     63            }

     64        }

     65
     66        public int baudRate
     67        {
     68            set
     69            {
     70                this.m_baudRate = value;
     71            }

     72            get
     73            {
     74                return this.m_baudRate;
     75            }

     76        }

     77
     78        public Parity parity
     79        {
     80            set
     81            {
     82                this.m_parity = value;
     83            }

     84            get
     85            {
     86                return this.m_parity;
     87            }

     88        }

     89        public int dataBits
     90        {
     91            set
     92            {
     93                this.m_dataBits = value;
     94            }

     95            get
     96            {
     97                return this.m_dataBits;
     98            }

     99        }

    100        public StopBits stopBits
    101        {
    102            set
    103            {
    104                this.m_stopBits = value;
    105            }

    106            get
    107            {
    108                return this.m_stopBits;
    109            }

    110        }

    111    }

    112}

    113

    四、配置信息类ConfigManager.cs
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using System.Xml;
      5using System.IO.Ports;
      6
      7namespace BOM.NewUI.PrinterManager
      8{
      9    public class ConfigManager
     10    {
     11        public ConfigManager()
     12        {
     13        }

     14        /// <summary>
     15        /// 配置文件路径
     16        /// </summary>

     17        private string fileName = "PrinterManager/printerConfig.xml";
     18
     19        public SerialPortInfo GetConfig(string printerName)
     20        {
     21            XmlDataDocument doc = new XmlDataDocument();
     22            doc.Load(fileName);
     23            XmlNode rootnode = doc.DocumentElement.SelectSingleNode("/SerialPortInfo/printer[@name='" + printerName + "']");
     24            SerialPortInfo info = new SerialPortInfo();
     25            foreach (XmlNode node in rootnode.ChildNodes)
     26            {
     27                switch (node.Name.ToLower())
     28                {
     29                    case "printertype":
     30                        info.printerType = node.InnerText;
     31                        break;
     32                    case "porttype":
     33                        info.portType = node.InnerText;
     34                        break;
     35                    case "portname":
     36                        info.portName = node.InnerText.ToUpper();
     37                        break;
     38                    case "baudrate":
     39                        info.baudRate = int.Parse(node.InnerText);
     40                        break;
     41                    case "parity":
     42                        info.parity = GetParity(node.InnerText);
     43                        break;
     44                    case "databits":
     45                        info.dataBits = int.Parse(node.InnerText);
     46                        break;
     47                    case "stopbits":
     48                        info.stopBits = GetStopBits(node.InnerText);
     49                        break;
     50                }

     51            }

     52            return info;
     53        }

     54
     55        public void SetConfig(SerialPortInfo info,string printerName)
     56        {
     57            XmlDataDocument doc = new XmlDataDocument();
     58            doc.Load(fileName);
     59            XmlNode rootnode = doc.DocumentElement.SelectSingleNode("/SerialPortInfo/printer[@name='" + printerName + "']");
     60            foreach (XmlNode node in rootnode.ChildNodes)
     61            {
     62                switch (node.Name.ToLower())
     63                {
     64                    case "printertype":
     65                        node.InnerText = info.printerType;
     66                        break;
     67                    case "porttype":
     68                        node.InnerText = info.portType;
     69                        break;
     70                    case "portname":
     71                        node.InnerText = info.portName;                        
     72                        break;
     73                    case "baudrate":
     74                        node.InnerText = info.baudRate.ToString();
     75                        break;
     76                    case "parity":
     77                        node.InnerText = info.parity.ToString();
     78                        break;
     79                    case "databits":
     80                        node.InnerText = info.dataBits.ToString();
     81                        break;
     82                    case "stopbits":
     83                        node.InnerText = info.stopBits.ToString();
     84                        break;
     85                }

     86            }

     87            doc.Save(this.fileName);
     88        }

     89
     90        public Parity GetParity(string parity)
     91        {
     92            Parity p = Parity.None;
     93            switch (parity.ToLower())
     94            {
     95                case "even":
     96                    p = Parity.Even;
     97                    break;
     98                case "mark":
     99                    p = Parity.Mark;
    100                    break;
    101                case "none":
    102                    p = Parity.None;
    103                    break;
    104                case "odd":
    105                    p = Parity.Odd;
    106                    break;
    107                case "space":
    108                    p = Parity.Space;
    109                    break;
    110
    111            }

    112            return p;
    113        }

    114
    115        public StopBits GetStopBits(string stopBits)
    116        {
    117            StopBits sb = StopBits.One;
    118            switch (stopBits.ToLower())
    119            {
    120                case "none":
    121                    sb = StopBits.None;
    122                    break;
    123                case "one":
    124                    sb = StopBits.One;
    125                    break;
    126                case "onepointfive":
    127                    sb = StopBits.OnePointFive;
    128                    break;  
    129                case "two":
    130                    sb = StopBits.Two;
    131                    break;
    132            }

    133            return sb;
    134        }
            
    135    }
        
    136}

    137

    五、利用模板获取变量值 Templete.cs
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using System.Xml;
      5using System.IO.Ports;
      6using System.Windows.Forms;
      7
      8namespace BOM.NewUI.PrinterManager
      9{
     10    /// <summary>
     11    /// 票据模板类
     12    /// </summary>

     13    public class Template
     14    {
     15        /// <summary>
     16        /// 模板路径
     17        /// </summary>

     18        private string filePath = "PrinterManager/Template.xml";
     19        /// <summary>
     20        /// 打印
     21        /// </summary>
     22        /// <param name="sp">SerialPort对象</param>
     23        /// <param name="templateID">模板编号</param>

     24        public void Print(SerialPort sp,string templateID)
     25        {
     26            XmlDataDocument doc = new XmlDataDocument();
     27            doc.Load(filePath);
     28            XmlNode root = doc.DocumentElement.SelectSingleNode(string.Format("/root/template[@id='{0}']", templateID));
     29            
     30            Printer.WriteData(sp, PrinterCommand.CMD_INIT); //初始化打印机
     31            foreach (XmlNode node in root.ChildNodes)
     32            {
     33                switch (node.Name.ToLower())
     34                {
     35                    case "title":
     36                        PrintTitle(sp, node);
     37                        break;
     38                    case "body":
     39                        PrintBody(sp, node,templateID);
     40                        break;
     41                }

     42            }

     43        }

     44
     45        /// <summary>
     46        /// 设置对齐方式和字体样式
     47        /// </summary>
     48        /// <param name="sp">SerialPort</param>
     49        /// <param name="justification">对齐方式</param>
     50        /// <param name="style">文本样式</param>
     51        /// <param name="printText">要打印的文本</param>
     52        /// <param name="color">颜色</param>

     53        private void SetJustificationAndStyle(SerialPort sp, string justification, string style ,string printText,string color)
     54        {
     55            switch( justification.ToLower())
     56            {
     57                case "center":
     58                    Printer.WriteData(sp,PrinterCommand.CMD_CENTER);
     59                    break;
     60                case "left":
     61                    Printer.WriteData(sp,PrinterCommand.CMD_LEFT);
     62                    break;
     63                case "right":
     64                    Printer.WriteData(sp,PrinterCommand.CMD_RIGHT);
     65                    break;
     66            }

     67            switch( style.ToLower())
     68            {
     69                case "0":
     70                    Printer.WriteData(sp, PrinterCommand.CMD_NORMAL);
     71                    break;
     72                case "1":
     73                    Printer.WriteData(sp, PrinterCommand.CMD_DOUBLEHEIGHT);
     74                    break;
     75                case "2":
     76                    Printer.WriteData(sp, PrinterCommand.CMD_DOUBLEWIDTH);
     77                    break;
     78                case "3":
     79                    Printer.WriteData(sp, PrinterCommand.CMD_DOUBLEHEIGHTANDDOUBLEWIDTH);
     80                    break;
     81            }
     
     82            switch (color.ToLower())
     83            {
     84                case "0":
     85                    Printer.WriteData(sp, PrinterCommand.CMD_COLOR_BLACK);
     86                    break;
     87                case "1":
     88                    Printer.WriteData(sp, PrinterCommand.CMD_COLOR_RED);
     89                    break;
     90                
     91            }

     92            Printer.WriteData(sp,Encoding.Default.GetBytes( printText ));
     93            Printer.WriteData(sp, PrinterCommand.CMD_NEWLINE);
     94            Printer.WriteData(sp,PrinterCommand.CMD_NORMAL);
     95            Printer.WriteData(sp, PrinterCommand.CMD_LEFT);
     96            Printer.WriteData(sp, PrinterCommand.CMD_COLOR_BLACK);
     97        }

     98        /// <summary>
     99        /// 根据变量名称取得变量的值
    100
    101        /// </summary>
    102        /// <param name="varName">变量名称</param>
    103        /// <returns>变量值</returns>

    104        private string GetValue(string varName, string templateID)
    105        {
    106            string result = string.Empty;
    107            switch (templateID.Substring(03).ToUpper())
    108            {
    109                case "ACC"://一票通
    110                    
    206                    break;                   
    207                case "OCT"://一卡通
    208                    
    258                    break;
    259            }

    260            return result;
    261        }

    262
    263        /// <summary>
    264        /// 打印票据标题
    265        /// </summary>
    266        /// <param name="sp">SerialPort对象</param>
    267        /// <param name="node">XmlNode对象</param>

    268        private void PrintTitle(SerialPort sp, XmlNode root)
    269        {
    270            string printText = root.Attributes["text"].Value;
    271            string justification = root.Attributes["justification"].Value;
    272            string style = root.Attributes["style"].Value;
    273            string color = root.Attributes["color"].Value;
    274            SetJustificationAndStyle(sp, justification, style, printText,color);
    275        }

    276        
    277        /// <summary>
    278        /// 打印票据主体
    279        /// </summary>
    280        /// <param name="sp">SerialPort对象</param>
    281        /// <param name="root">XmlNode对象</param>

    282        private void PrintBody(SerialPort sp, XmlNode root, string templateID)
    283        {
    284            foreach (XmlNode node in root.ChildNodes)
    285            {
    286                string text = node.Attributes["text"].Value;
    287                string value = GetValue(node.Attributes["value"].Value,templateID);
    288                string style = node.Attributes["style"].Value;
    289                string color = node.Attributes["color"].Value;
    290
    291                StringBuilder sb = new StringBuilder();
    292                sb.Append(text);
    293                sb.Append("\t");
    294                sb.Append(value);
    295                //SetJustificationAndStyle(sp, string.Empty, style, sb.ToString(),color);
    296                SetJustificationAndStyle(sp, "left", style, sb.ToString(), color);
    297            }
                
    298        }

    299
    300        /// <summary>
    301        /// print report title and context
    302        /// </summary>
    303        /// <param name="sp">SerialPort对象</param>
    304        /// <param name="contextstr">上下文</param>

    305        public void PrintReport(SerialPort sp, string ReportTitle, string ReportContext)
    306        {
    307            Printer.WriteData(sp, PrinterCommand.CMD_INIT); //初始化打印机           
    308            string alinement = "center";
    309            string alinement1 = "left";
    310            string alinement2 = "right";
    311            string sizeoffont = "2";//大小
    312            string sizeoffont1 = "0";
    313            string coloroffont = "0";//颜色
    314            string coloroffont1 = "1";            
    315            SetJustificationAndStyle(sp, alinement, sizeoffont, ReportTitle, coloroffont1);
    316            SetJustificationAndStyle(sp, alinement1, sizeoffont1, ReportContext, coloroffont);
    317
    318        }

    319    }

    320}

    321

    六、打印调用BOMPrinter.cs
     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4using System.IO.Ports;
     5using System.IO;
     6
     7namespace BOM.NewUI.PrinterManager
     8{
     9    public class BOMPrinter
    10    {        
    11        /// <summary>
    12        /// 打印
    13        /// </summary>
    14        /// <param name="PrintTypeCode">ACC01 或 OCT01</param>

    15        public static void Printer(string PrintTypeCode)
    16        {
    17            //ACC01  or  OCT01   and so on 
    18            switch (PrintTypeCode.Substring(03).ToLower())
    19            {
    20                case "acc":
    21                    SerialPort sp = BOM.NewUI.PrinterManager.Printer.CreateSerialPort("票据打印机");
    22                    BOM.NewUI.PrinterManager.Printer.Print(sp, PrintTypeCode);
    23                    sp.Close();
    24                    break;
    25                case "oct":
    26                    SerialPort sp1 = BOM.NewUI.PrinterManager.Printer.CreateSerialPort("票据打印机");
    27                    BOM.NewUI.PrinterManager.Printer.Print(sp1, PrintTypeCode);
    28                    sp1.Close();
    29                    break;
    30                default:
    31                    break;
    32            }
               
    33        }

    34        /// <summary>
    35        /// 打印DG
    36        /// </summary>
    37        /// <param name="ReportTitle"></param>
    38        /// <param name="ReportContext"></param>

    39        public static void PrintReports(string ReportTitle,string ReportContext)
    40        {
    41            SerialPort sp = BOM.NewUI.PrinterManager.Printer.CreateSerialPort("票据打印机");
    42            Template tt = new Template();
    43            tt.PrintReport(sp, ReportTitle, ReportContext);
    44            sp.Close();            
    45        }

    46    }

    47}

    48

    七、配置文件PrinterConfig.xml
     1<?xml version="1.0" encoding="utf-8" ?>
     2<SerialPortInfo>
     3  <printer name="发票打印机">
     4    <printertype>TM-U220B</printertype>
     5    <porttype>串口</porttype>
     6    <portname>COM5</portname>
     7    <baudrate>9600</baudrate>
     8    <parity>None</parity>
     9    <databits>8</databits>
    10    <stopbits>One</stopbits>
    11  </printer>
    12  <printer name="票据打印机">
    13    <printertype>TM-U220B</printertype>
    14    <porttype>串口</porttype>
    15    <portname>COM2</portname>
    16    <baudrate>9600</baudrate>
    17    <parity>None</parity>
    18    <databits>8</databits>
    19    <stopbits>One</stopbits>
    20  </printer>
    21</SerialPortInfo>

    通过以后的工作后,若以后需要增加一些票据的话,只需在相应在XML文件中添加相应的模板信息再,再在Templete.cs文件中给啬的变量付值 ,就可以实现了。
  • 相关阅读:
    「应用管理与交付」为什么会成为云原生新的价值聚焦点?
    Quick BI:降低使用门槛,大东鞋业8000家门店的数据导航
    如何用Netty写一个高性能的分布式服务框架?
    印度批准苹果和三星1430亿美元的智能手机制造计划
    东京证券交易所暂停了全天交易,与黑客有关吗?
    这些杀毒软件现漏洞,可能使计算机更易受黑客攻击
    又躺赚1亿?东方联盟创始人郭盛华,会的仅仅是技术吗?
    谷歌的VR虚拟现实为何失败了?VR的未来何去何从?
    爆料电脑天才郭盛华的稀有童年照,原来小时候就很帅
    好莱坞野心导演:郭盛华的传奇故事将拍黑客电影?他会参演吗?
  • 原文地址:https://www.cnblogs.com/winnxm/p/911123.html
Copyright © 2011-2022 走看看