C#打印条码到Zebra打印机

来源:互联网 发布:ubuntu怎么杀死进程 编辑:程序博客网 时间:2024/06/10 22:23

建立一个winform程序,添加两个textbox,一个button。 其中一个textbox设为允许多行 textbox1, 一个为txtport,

 

新增一个类文件

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace WinForm_Print{    public class PrinterControl    {        [StructLayout(LayoutKind.Sequential)]        private struct OVERLAPPED        {            int Internal;            int InternalHigh;            int Offset;            int OffSetHigh;            int hEvent;        }        [DllImport("kernel32.dll ")]        private static extern int CreateFile(        string lpFileName,        uint dwDesiredAccess,        int dwShareMode,        int lpSecurityAttributes,        int dwCreationDisposition,        int dwFlagsAndAttributes,        int hTemplateFile        );        [DllImport("kernel32.dll ")]        private static extern bool WriteFile(        int hFile,        byte[] lpBuffer,        int nNumberOfBytesToWrite,        out   int lpNumberOfBytesWritten,        out   OVERLAPPED lpOverlapped        );        [DllImport("kernel32.dll ")]        private static extern bool CloseHandle(        int hObject        );        private int iHandle;        public bool Open(string strPort)        {            iHandle = CreateFile(strPort, 0x40000000, 0, 0, 3, 0, 0);            if (iHandle != -1)            {                return true;            }            else            {                return false;            }        }        public bool Write(String Mystring)        {            if (iHandle != -1)            {                int i;                OVERLAPPED x;                byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);                return WriteFile(iHandle, mybyte, mybyte.Length, out   i, out   x);            }            else            {                throw new Exception("端口未打开! ");            }        }        public bool Close()        {            return CloseHandle(iHandle);        }    }}

 

write函数也可为, 其中的 iHandle 要改为 IntPtr 类型

        public bool Write(String Mystring)        {            if (iHandle.ToInt32() != -1)            {                int i;                OVERLAPPED x;                FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);                StreamWriter sw = new StreamWriter(fs, Encoding.Default);                sw.WriteLine(Mystring);                sw.Close();                fs.Close();                return true;            }            else            {                throw new Exception("端口未打开! ");            }        }


 


button后台代码为

 

        private void button1_Click(object sender, EventArgs e)        {            //printDialog1.Document = printDocument1;            //DialogResult result = printDialog1.ShowDialog();            //if (result == DialogResult.OK)            //printDocument1.Print();            PrinterControl lpt = new PrinterControl();            string mycommanglines = textBox1.Text;//System.IO.File.ReadAllText("zplII.txt");//zplII.txt里写了条码机的命令            lpt.Open(txtPort.Text);            lpt.Write(mycommanglines).ToString();            lpt.Close();        }

 

 

打印中文方法

1.调用函数GETFONTHEX()该函数的功能是将传入的中文字符串转换为十六进制编码并返回。

2.函数使用的C#原型

[DllImport("fnthex32.dll")]public static extern  int GETFONTHEX(string barcodeText,string fontName,string fileName,int orient,int height,int width,int isBold,int isItalic,StringBuilder returnBarcodeCMD); 


3.实例

调用下面条码指令打印会打印“测试”二个汉字)

string sBarCodeCMD = string.Empty;    //条码打印命令StringBuilder sb1 = new StringBuilder(10240);    //用给定的容量创建一个空的StringBuilderint  li = GETFONTHEX(“测试”,“宋体”,“temp1”,0,30,20,0,0,sb1); //转换为HEX编码(16进制)sBarCodeCMD = sb1.ToString() + "^XA^MD30^LH20,20^FO20,20^XGtemp1,1,1^FS^XZ";



http://wenku.baidu.com/view/83387ceb172ded630a1cb605.html

http://hi.baidu.com/sunflower/item/3544cd9e56bf28dc1e427169

http://wenku.baidu.com/view/9e4a8d65caaedd3383c4d3d6.html 含中文打印
原创粉丝点击