C#实现EPL II格式打印与打印测试

作者:springsnow 时间:2021-10-24 06:40:50 

一、EPL II 格式及打印测试

注意N命令前的换行和最后P1后的换行。将此段代码复制到windows记事本里另存为Print.ext,文件名随便,后缀为ext。然后通过cmd控制命令行输入"copy c:\print.ext COM1”。然后就可以看到打印机开始打印了,效果不错。

N
B300,5,0,1,2,3,40,N,"1234567891123"
A160,55,0,8,1,1,N,"ALP-122244444444"
b420,100,Q,"DATAdfdgdfgdf"
P1
  • 说明书上说N命令开始前要先输入一行空白行,
    原文:Always send a Line Feed (LF) prior to the N command to ensure that previous data in the command buffer has cleared and the printer is in i tial ized and ready to ac cept com mands.

  • P命令之后也要加一个空白行,即回车,不然最后的P命令要打印的东西是不打印的,之前的P命令由于有后面的命令,间接等于换行了,所以会照打不误。

  • 说明书上写P命令是Pp1, [p2],其参数p1是Number of label sets,而参数p2是Number of copies of each label (used in combination with counters to print multiple copies of the same label).
    但我试验下来p1就是要打印的条码的重复次数,而p2无论我怎么改写都没有变换,始终打印最后一个条码。应该是我哪里写错了。但是多用几次P1,每次打一条还是可以起到同样的打印多条条码的效果的。

下面,给出我打印的条码的例子:

N
B60,5,0,1,2,3,40,N,"1234567891123"
A60,55,0,8,1,1,N,"ALP-1"
P1
B60,5,0,1,2,3,40,N,"1234567890123"
A60,55,0,8,1,1,N,"ALP-2"
P1
B60,5,0,1,2,3,40,N,"1234567890123"
A60,55,0,8,1,1,N,"ALP-3"
P1

发送到打印机测试:

NET USE LPT1 /DELETE
NET USE LPT1 \\192.168.2.166\zetl /persistent:yes
copy c:\1.txt lpt1
copy c:\1.txt \\192.168.2.167\zetl

二、使用API发送内容进行打印:

private void button1_Click_1(object sender, EventArgs e)
{
   string txt = textBox1.Text;
   LPTControl lpt = new LPTControl();
   //string cmd = System.IO.File.ReadAllText("zplII.txt");//zplII.txt里写了条码机的命令

string cmd = Environment.NewLine + "N" + Environment.NewLine
   + "B60,5,0,1,2,3,40,N,\"1234567891123\"" + Environment.NewLine + "A60,55,0,8,1,1,N,\"ALP-5\"" + Environment.NewLine + "P1" + Environment.NewLine
   + "B60,5,0,1,2,3,40,N,\"1234567891123\"" + Environment.NewLine + "A60,55,0,8,1,1,N,\"ALP-6\"" + Environment.NewLine + "P1" + Environment.NewLine
   + "B60,5,0,1,2,3,40,N,\"1234567891123\"" + Environment.NewLine + "A60,55,0,8,1,1,N,\"ALP-7\"" + Environment.NewLine + "P1" + Environment.NewLine;

if (!lpt.Open())
   {
       throw new Exception("未能连接打印机,请确认打印机是否安装正确并接通电源。");
   }
   lpt.Write(cmd);
   if (!lpt.Close())
   {
       if (!lpt.Open())
       {
           throw new Exception("未能连接打印机,请确认打印机是否安装正确并接通电源。");
       }
   }
}

public class LPTControl
{
   [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()
   {
       iHandle = CreateFile("lpt1:", 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);
   }
}

来源:https://www.cnblogs.com/springsnow/p/11394587.html

标签:C#,EPL II,格式,打印
0
投稿

猜你喜欢

  • 在Java中判断两个Long对象是否相等

    2022-09-01 11:22:10
  • Java开发岗位面试被问到反射怎么办

    2023-01-07 00:09:12
  • 在Spring环境中正确关闭线程池的姿势

    2023-11-25 08:07:29
  • Jenkins Pipeline 部署 SpringBoot 应用的教程详解

    2022-09-26 14:06:27
  • 使用maven运行Java Main的三种方法解析

    2021-09-24 10:09:28
  • java中Executor,ExecutorService,ThreadPoolExecutor详解

    2023-10-31 10:50:56
  • Android四大组件之broadcast广播使用讲解

    2023-07-27 12:41:50
  • java多线程Synchronized实现可见性原理解析

    2021-08-26 02:10:02
  • java map转Multipart/form-data类型body实例

    2023-04-19 13:16:18
  • 浅谈Synchronized和Lock的区别

    2023-10-26 04:28:33
  • Java流程控制之选择结构

    2021-10-24 08:12:50
  • 详解Java单元测试之JUnit篇

    2023-06-12 16:42:13
  • Java中基于Shiro,JWT实现微信小程序登录完整例子及实现过程

    2023-07-05 15:01:42
  • SpringBoot使用JWT实现登录验证的方法示例

    2023-09-19 19:12:10
  • 关于activemq安装配置以及启动错误的解决

    2023-11-13 05:18:02
  • C++实现softmax函数的面试经验

    2023-06-16 02:07:47
  • 基于SpringBoot核心原理(自动配置、事件驱动、Condition)

    2023-08-23 01:46:31
  • Java Set集合及其子类HashSet与LinkedHashSet详解

    2023-11-26 11:39:35
  • IDEA远程连接HBase及其Java API实战详解

    2023-11-27 21:54:46
  • RxJava+Retrofit+Mvp实现购物车

    2022-03-22 16:24:48
  • asp之家 软件编程 m.aspxhome.com