C#使用ESC指令控制POS机打印小票

C#使用ESC指令控制POS机打印小票
C#使用ESC指令控制POS机打印小票

C#使用ESC指令控制POS打印机打印小票

1.前言

C#打印小票可以与普通打印机一样,调用PrintDocument实现。也可以发送标注你的ESC指令实现。由于调用PrintDocument类时,无法操作使用串口或TCP/IP接口连接的pos打印机,并且无法发送控制指令实现pos 打印机的切纸、走纸等动作。因此个人建议使用ESC指令进行打印会更通用。

本类需要调用ImageProcessor.cs

25035844@https://www.360docs.net/doc/ca16056778.html,

2.POS机打印小票ReceiptHelper

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

using System.Threading;

using System.Drawing;

using System.Management;

using System.IO;

using LaisonTech.MediaLib;

using https://www.360docs.net/doc/ca16056778.html,monBLL;

using Microsoft.Win32.SafeHandles;

namespace LaisonTech.MediaLib

{

#region结构体定义

[StructLayout(LayoutKind.Sequential)]

public struct OVERLAPPED

{

int Internal;

int InternalHigh;

int Offset;

int OffSetHigh;

int hEvent;

};

[StructLayout(LayoutKind.Sequential)]

public struct PRINTER_DEFAULTS

{

public int pDatatype;

public int pDevMode;

public int DesiredAccess;

}

///

///对齐方式

///

public enum eTextAlignMode

{

Left = 0,

Middle = 1,

Right = 2

}

#endregion

///

///小票打印类

/// 使用方法:

/// 1 GetPrinterList获取已经安装的所有打印机列表.

/// Open 打开指定打印机

/// 2 控制打印机动作、执行打印内容之前,必须先调用StartPrint,准备向打印机发送控制指令

/// 3 调用SetLeft, SetBold, SetAlignMode, SetFontSize ... ...设置打印参数

/// 4 PrintText 打印内容.注意:打印该行内容后会自动换行(本类会在该行内容末尾添加一个换行符) /// PrintImageFile 或PrintBitMap打印图片

/// 5 控制指令和打印内容都发送完毕后,调用EndPrint执行真正打印动作

/// 6 退出程序前调用Close

///

public class ReceiptHelper

{

#region指令定义

private static Byte[] Const_Init = new byte[] { 0x1B, 0x40,

0x20, 0x20, 0x20, 0x0A,

0x1B, 0x64,0x10};

//设置左边距

private const string Const_SetLeft = "1D 4C ";

//设置粗体

private const string Const_SetBold = "1B 45 ";

private const String Const_Bold_YES = "01";

private const String Const_Bold_NO = "00";

//设置对齐方式

private const string Const_SetAlign = "1B 61 ";

private const String Const_Align_Left = "30";

private const String Const_Align_Middle = "31";

private const String Const_Align_Right = "32";

//设置字体大小,与SetBigFont 不能同时使用

private const string Const_SetFontSize = "1D 21 ";

//设置是否大字体,等同于SetFontSize = 2

//private const String Const_SetBigFontBold = "1B 21 38";

//private const String Const_SetBigFontNotBold = "1B 21 30";

//private const String Const_SetCancelBigFont = "1B 21 00";

///

///打印并走纸

///

private static Byte[] Const_Cmd_Print = new byte[] { 0x1B, 0x4A, 0x00 }; //走纸

private const string Const_FeedForward = "1B 4A ";

private const string Const_FeedBack = "1B 6A ";

//切纸

private static Byte[] Const_SetCut = new byte[] { 0x1D, 0x56, 0x30};

//查询打印机状态

private static Byte[] Const_QueryID = new byte[] { 0x1D, 0x67, 0x61};

//回复帧以ID 开头

private static String Const_ResponseQueryID = "ID";

///

///设置图标的指令

///

private static Byte[] Const_SetImageCommand = new Byte[] { 0x1B, 0x2A, 0x21 }; #endregion

#region常量定义

///

///最大字体大小

///

public const Int32 Const_MaxFontSize = 8;

///

///最大走纸距离

///

public const Int32 Const_MaxFeedLength = 5000;

///

///最大高宽

///

public const Int32 Const_MaxImageLength = 480;

///

///每次通信最多打印的行数

///

public const Int32 Const_OncePrintRowCount = 24;

public const Int32 Const_BrightnessGate = 100;

///

///无效句柄

///

public const Int32 Const_InvalidHandle = -1;

#endregion

#region私有成员

///

///打印机句柄

///

private int m_Handle = -1;

///

///是否已经初始化

///

private Boolean m_Inited = false;

#endregion

#region私有函数

[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter,

out Int32 hPrinter, IntPtr pd);

[DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool StartDocPrinter(Int32 hPrinter, Int32 level, [In,

MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

[DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool EndDocPrinter(Int32 hPrinter);

[DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool StartPagePrinter(Int32 hPrinter);

[DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool EndPagePrinter(Int32 hPrinter);

[DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool WritePrinter(Int32 hPrinter, Byte[] pBytes, Int32 dwCount, out Int32 dwWritten);

[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]

public static extern bool ClosePrinter(Int32 hPrinter);

///

///发送指令

///

///

///

private Boolean SendCommand(Byte[] cmd)

{

if (m_Handle == Const_InvalidHandle || cmd == null || cmd.Length < 2)

{

return false;

}

int writelen = 0;

Boolean bl = WritePrinter(m_Handle, cmd, cmd.Length, out writelen);

if (!bl) return false;

return (writelen >= cmd.Length);

}

///

///发送文本格式的指令

///

///

///

private Boolean SendCommand(String hexstrcmd)

{

if (m_Handle == Const_InvalidHandle || hexstrcmd == null || hexstrcmd.Length < 4) {

return false;

}

byte[] mybyte = null;

Boolean bl = DataFormatProcessor.HexStringToBytes(hexstrcmd, out mybyte);

bl = SendCommand(mybyte);

return bl;

}

#endregion

#region内部处理- 打印图片

///

///把图片转换为指令字节,图片最大高宽不能超过480

///

///

///

///

public static Boolean LoadImage(Bitmap image,

ref Byte[] bitarray,ref Int32 datawidth,ref Int32 dataheight)

{

Int32 newwidth = 0;

Int32 newheight = 0;

Bitmap destimage = image;

Boolean bl = false;

//如果高度超过范围,或宽度超过范围,需要进行缩小

if (image.Width > Const_MaxImageLength || image.Height > Const_MaxImageLength) {

//按照高度和宽度,较大的那一边,进行缩放

if (image.Width > image.Height)

{

newwidth = Const_MaxImageLength;

newheight = (Int32)(image.Height * newwidth / (float)image.Width);

}

else

{

newheight = Const_MaxImageLength;

newwidth = (Int32)(newheight * image.Width / (float)image.Height);

}

bl = ImageProcessor.ResizeImage(image, newwidth, newheight, ref destimage);

}

//把数据转换为字节数组

bl = GetBitArray(image, ref bitarray, ref datawidth, ref dataheight);

return bl;

}

///

///把图片转换为指令字节,图片最大高宽不能超过480

///如果图片的高度不是24的整数倍,则修改为24的整数倍

///

///

///

///

public static Boolean LoadImageFromFile(String imagefilename, ref Byte[] bmpbytes, ref Int32 width, ref Int32 height)

{

Bitmap img = ImageProcessor.LoadBitImage(imagefilename);

if (img == null)

{

return false;

}

Boolean bl = LoadImage(img, ref bmpbytes, ref width, ref height);

return bl;

}

///

///把图片转换为位图数组,每个字节的每个比特位,对应当前像素是否需要打印

///

///

///

///

public static Boolean GetBitArray(Bitmap img,

ref Byte[] allbitary, ref Int32 width, ref Int32 height)

{

if (img == null)

{

return false;

}

//ESC指令格式规定:

//1 打印图片时,每条指令最多只打印24行;不足24行的,也要用全0填充满数据字节//2 打印24行数据时,按照光栅模式纵向获取数据

// 即先获取所有x=0的点(第0列)转换为3个字节;

// 再获取所有x=1的点转换为3个字节;...直到获取到最右侧一列的点

//3 打印完当前24行数据后,再获取后续24行的数据内容,直到所有的数据获取完毕

//获取亮度数组

Boolean[] briary = null;

Boolean bl = ImageProcessor.ToBooleanArray(img, Const_BrightnessGate, ref briary);

if (!bl)

{

return false;

}

height = img.Height;//如果图像高度不是24整数倍,设置为24的整数倍

if (height % Const_OncePrintRowCount != 0)

{

height = height + Const_OncePrintRowCount - height % Const_OncePrintRowCount;

}

width = img.Width;//如果图像宽度不是8的整数倍,设置为8的整数倍

if (width % 8 != 0)

{

width = width + 8 - width % 8;

}

Int32 bytelen = height * width / 8;//每个像素对应1个比特位,因此总字节数=像素位数/8

allbitary = new Byte[bytelen];

Int32 byteidxInCol = 0;//当前列里首个像素,在目标字节数组里的下标

Int32 byteidx = 0;//当前像素在目标数组里的字节下标

Int32 bitidx = 0;//当前像素在目标数组里当前字节里的比特位下标

Int32 pixidxInCol = 0;//当前像素在当前列里的第几个位置

Int32 pixidx = 0;//当前像素在原始图片里的下标

Int32 rowidx = 0; //当前处理的像素点所在行,不能超过图像高度

Int32 curprocrows = 0;//当前需要处理的行数量

while (rowidx < height)

{

//按照纵向次序,把当前列的24个数据,转换为3个字节

for (Int32 colidx = 0; colidx < img.Width; ++colidx)

{

//如果当前还剩余超过24行没处理,处理24行

if (rowidx + Const_OncePrintRowCount <= img.Height)

{

curprocrows = Const_OncePrintRowCount;

}

else

{

//已经不足24行,只处理剩余行数

curprocrows = img.Height - rowidx;

}

pixidxInCol = 0; //本列里从像素0开始处理

for (Int32 y = rowidx; y < rowidx + curprocrows; ++y)

{

//原始图片里像素位置

pixidx = y * img.Width + colidx;

//获取当前像素的亮度值.如果当前像素是黑点,需要把数组里的对应比特位设置为1

if (briary[pixidx])

{

bitidx = 7 - pixidxInCol % 8;//最高比特位对应首个像素.最低比特位对应末个像素

byteidx = byteidxInCol + pixidxInCol / 8; //由于最后一段可能不足24行,因此不能使用byteidx++

DataFormatProcessor.SetBitValue(bitidx, true, ref allbitary[byteidx]);

}

pixidxInCol++;

}

byteidxInCol += 3;//每列固定24个像素,3个字节

}

rowidx += Const_OncePrintRowCount;

}

return true;

}

#endregion

#region公开函数

private static ReceiptHelper m_instance = new ReceiptHelper();

///

///当前使用的打印机名称

///

public String PrinterName

{

get;private set;

}

///

///单件模式

///

///

public static ReceiptHelper GetInstance()

{

return m_instance;

}

///

///获取本机安装的所有打印机

///

///

public static List GetPrinterList()

{

List ret = new List();

if (PrinterSettings.InstalledPrinters.Count < 1)

{

return ret;

}

foreach (String printername in PrinterSettings.InstalledPrinters)

{

ret.Add(printername);

}

return ret;

}

///

///打开打印机

///

///

///

public Boolean Open(String printername)

{

if (m_Inited)

{

return true;

}

Boolean bl = OpenPrinter(printername.Normalize(), out m_Handle, IntPtr.Zero);

m_Inited = (bl && m_Handle != 0);

return true;

}

///

///开始打印,在打印之前必须调用此函数

///

///

public Boolean StartPrint()

{

if (!m_Inited)

{

return false;

}

DOCINFOA di = new DOCINFOA();

di.pDocName = "My C#.NET RAW Document";

di.pDataType = "RAW";

//Start a document.

Boolean bl = StartDocPrinter(m_Handle, 1, di);

if (!bl)

{

return false;

}

// Start a page.

bl = StartPagePrinter(m_Handle);

return bl;

}

///

///结束打印,在打印结束之后必须调用此函数

///

///

public Boolean EndPrint()

{

if (!m_Inited)

{

return false;

}

Boolean bl = EndPagePrinter(m_Handle);

bl = EndDocPrinter(m_Handle);

return bl;

}

///

///销毁

///

///

public Boolean Close()

{

if (!m_Inited)

{

return true;

}

m_Inited = false;

//关闭设备句柄

ClosePrinter(m_Handle);

m_Handle = -1;

return true;

}

///

///打印文本.在调用本函数之前必须先调用正确的设置字体、左边距///

///

///

public Boolean PrintText(String content)

{

if (!m_Inited)

{

return false;

}

byte[] bytes = null;

if (content.Length < 1)

{

content = " ";

}

if (content[content.Length - 1] != (char)0x0D &&

content[content.Length - 1] != (char)0x0A)

{

content = content + (char)0x0A;

}

bytes = DataFormatProcessor.StringToBytes(content);

bool bl = SendCommand(bytes);

return bl;

}

///

///设置对齐方式

///

///

///

public bool SetAlignMode(eTextAlignMode alignmode)

{

if (!m_Inited)

{

return false;

}

String code = String.Empty;

switch (alignmode)

{

case eTextAlignMode.Left:

code = Const_Align_Left;

break;

case eTextAlignMode.Middle:

code = Const_Align_Middle;

break;

case eTextAlignMode.Right:

code = Const_Align_Right;

break;

default:

code = Const_Align_Left;

break;

}

//注意:先低字节后高字节

string str = Const_SetAlign + code;

bool bl = SendCommand(str);

return bl;

}

///

///设置左边距

///

///

///

public bool SetLeft(int left)

{

if (!m_Inited)

{

return false;

}

//注意:先低字节后高字节

String hexstr = left.ToString("X4");

string str = Const_SetLeft + hexstr.Substring(2, 2) + hexstr.Substring(0, 2);

bool bl = SendCommand(str);

return bl;

}

///

///设置粗体

///

///

///

public Boolean SetBold(Boolean bold)

{

if (!m_Inited)

{

return false;

}

//注意:先低字节后高字节

String str = String.Empty;

if (bold)

{

str = Const_SetBold + Const_Bold_YES;

}

else

{

str = Const_SetBold + Const_Bold_NO;

}

bool bl = SendCommand(str);

return bl;

}

///

///切纸

///

///

public bool Cut()

{

if (!m_Inited)

{

return false;

}

bool bl = SendCommand(Const_SetCut);

return bl;

}

///

///打印图片

///

///

///

public bool PrintImageFile(String imgfilename)

{

if (!m_Inited)

{

return false;

}

Bitmap img = ImageProcessor.LoadBitImage(imgfilename);

if (img == null)

{

return false;

}

Boolean bl = PrintBitmap(img);

return bl;

}

///

///打印图片

///

///

///

public bool PrintBitmap(Bitmap bitmap)

{

if (!m_Inited)

{

return false;

}

if (bitmap == null ||

bitmap.Width > Const_MaxImageLength ||

bitmap.Height > Const_MaxImageLength)

{

return false;

}

Byte[] bitary = null;

Int32 width = 0;

Int32 height = 0;

Boolean bl = GetBitArray(bitmap, ref bitary, ref width, ref height);

bl = PrintBitmapBytes(bitary, bitmap.Width, bitmap.Height);

return bl;

}

///

///打印图片

///

///

///

public bool PrintBitmapBytes(Byte[] imgbitarray, Int32 width, Int32 height)

{

if (!m_Inited)

{

return false;

}

Int32 bytes = width * height / 8;

//检查是否尺寸符合要求

if (width > Const_MaxImageLength || height > Const_MaxFeedLength || width < 1 || height < 1 ||

imgbitarray == null)

{

return false;

}

//每次获取24行的数据进行发送,这24行的字节数

Int32 blockbytes = width * Const_OncePrintRowCount / 8;

if (blockbytes < 1)

{

return false;

}

Boolean bl = false;

//一共需要发送的块数量

Int32 blocks = imgbitarray.Length / blockbytes;

//每次发送的数据字节数= 1B 2A 21 2字节长度+数据内容

Byte[] cmdbytes = new Byte[5 + blockbytes];

//指令

Array.Copy(Const_SetImageCommand, cmdbytes, 3);

//数据长度,即每行的点数

DataFormatProcessor.Int16ToBytes(width, ref cmdbytes, 3);

//数据内容

for (Int32 blockidx = 0; blockidx < blocks; ++blockidx)

{

Array.Copy(imgbitarray, blockidx * blockbytes, cmdbytes, 5, blockbytes);

//发送当前指令

bl = SendCommand(cmdbytes);

if (!bl) return false;

//休眠20毫秒

Thread.Sleep(20);

//发送打印指令

bl = SendCommand(Const_Cmd_Print);

if (!bl) return false;

}

return bl;

}

///

///走纸

///

///

///

public bool Feed(int length)

{

if (!m_Inited)

{

return false;

}

if (length < 1)

length = 1;

if (length > Const_MaxFeedLength)

{

length = Const_MaxFeedLength;

}

string len = length.ToString("X2");

len = Const_FeedForward + len;

bool bl = SendCommand(len);

return bl;

}

///

///回退走纸

///

///

///

public bool FeedBack(int length)

{

if (!m_Inited)

{

return false;

}

if (length < 1)

length = 1;

if (length > Const_MaxFeedLength)

{

length = Const_MaxFeedLength;

}

string len = length.ToString("X2");

len = Const_FeedBack + len;

bool bl = SendCommand(len);

return bl;

}

///

///设置字体大小.本函数不可与SetBigFont同时使用

///

///大小倍率,取值范围1 - 8

///

public bool SetFontSize(Int32 sizerate)

{

if (!m_Inited)

{

return false;

}

if (sizerate < 1)

{

sizerate = 1;

}

if (sizerate > Const_MaxFontSize)

{

sizerate = Const_MaxFontSize;

}

sizerate--;

String sizecodestr = Const_SetFontSize + sizerate.ToString("X1") + sizerate.ToString("X1");

bool bl = SendCommand(sizecodestr);

return bl;

}

#endregion

}

}

3.图像处理ImageProcessor

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using https://www.360docs.net/doc/ca16056778.html,monBLL;

using System.Drawing.Imaging;

using System.IO;

using System.Drawing.Drawing2D;

using System.Windows.Forms;

using AForge.Imaging.Filters;

namespace LaisonTech.MediaLib

{

///

///图片格式

///

public enum ePictureFileFormat

{

Bmp = 0,

Gif = 1,

Icon = 2,

Jpeg = 3,

Png = 4,

}

///

///转为灰度图像的方式

///

public enum eGrayMode

{

///

///算数平均

///

ArithmeticAverage = 0,

///

///加权平均

///

用命令添加打印机

如何运用命令行添加打印机? 如果你是一个单位的网管恐怕为单位的各个科室、部门添加打印机特别是网络打印机是件很令人头痛的事,挨个部门跑吗?不,如果你能熟练的掌握下面的介绍的命令,那么你坐在自己的电脑前不需要其他任何的软件就可以轻松完成。 虽然Microsoft Windows NT 4.0 Zero Administration Kit (ZAK) 包含一些诸如Con2prt.exe 的工具,但是通过Con2prt.exe 工具,只能添加或删除网络打印机。您还可以使用Windows 2000 修改和删除本地打印机。因此,管理员可以通过使用户运行批处理文件或登录脚本,从而控制用户打印能力的所有方面。 注意:如果在登录脚本或客户端启动的批处理文件中使用此命令,则客户端计算机需要运行Windows 2000 或Windows Server 2003。由于要在客户端计算机上运行登录脚本,因此Windows NT 4.0 客户端无法处理此命令。 此外,可以从管理员的工作站或者从服务器运行这些命令,从而向客户端计算机推送安装打印机,而无须从实际的计算机执行安装。 更多信息 下面的示例列出此命令的最常见用法。 注意:此命令只能在基于Windows 2000 或基于Windows Server 2003 的计算机上运行,该计算机对应的服务器或工作站可以为Windows 2000、Windows Server 2003 或Windows NT 4.0。 下面的示例在一台名为SERVER 的计算机上添加一个Agfa 打印机驱动程序,并创建一个逻辑打印机。 注意:这两行都可以放入批处理文件中,也可以在命令提示符下按照任意顺序键入。这两行已换行以便于阅读。 rundll32 printui.dll,PrintUIEntry /ia /c\\server /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000" /f %windir%\inf\ntprint.inf rundll32 printui.dll,PrintUIEntry /if /b "Test Printer" /c\\SERVER /f "%windir%\inf\ntprint.inf" /r "lpt1:"/m "AGFA-AccuSet v52.3" 下面的示例从名为SERVER 的计算机中删除Agfa 打印机: rundll32 printui.dll,PrintUIEntry /dl /n "Test Printer" /c\\SERVER 有关可用开关的更多信息,请在该命令后键入/?。 此外,在命令提示符处,键入: rundll32 printui.dll,PrintUIEntry /? 上面的命令可显示用法开关的完整列表,并提供使用此方法的详细示例。 此外,在命令提示符处,键入: rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ? 上面的命令可显示有关更改打印机属性的其他帮助信息。下面的示例将当前的打印机驱动程序切换至指定的新打印机驱动程序(已安装在服务器上): rundll32 printui.dll,PrintUIEntry /Xs /n\\SERVER\PRINTERSHARENAME DriverName "Lexmark C752 PS3" 注意:下面是一个语法示例,只要创建“标准TCP/IP 端口”,该语法即可正确运行。 rundll32 printui.dll,PrintUIEntry /if /b "NORTH-US-SRTEST-TEST24-BOGUS"

ZPL II (Zebra 标签机)简易指令集 (转)

ZPL II (Zebra 标签机)简易指令集 (转) (2010-05-04 10:46:38) 转载▼ 分类:mymemo 标签: it ^XA: 指令名?:起始指令 指令左右: 当打印机接受到此命令时表示本段程序开始. ^XZ: 指令名称: 终止指令 指令作用: 当打印机接受到此指令时即表示本段程序终止并开始打印(注: 该两指令需配对使用) ^XA--------起始指令 ^LH0,0 ^FO203,203 ^BY3,2.4,50 ^B3N,Y,,Y ^FDABC123^FS ^XZ--------终止指令 ^LH x,y 指令名称: 定义标签起始位置指令 指令作用: (x,y)表示的含义是坐标值,但实际X和Y的值是点的数目.坐标值以每毫米包涵点数多少计算,依机型不同而有差异,如203dpi的机型,没1mm代表8点.如300dpi的机型,每1mm代表12点. 范例: ^LH30,30^FS 如果你的机型是用203dpi则表示:在离卷纸边3.75*3.75mm处为标签起始点.3.75是30/8得来的.

^LL y 指令名称:定义标签长度指令 指令作用: 限定使用在连续标签纸,y以每毫米(mm)包含点数多少计算,每一机型计算方式与前页一样. 范例: ^LL300^FS 表示您所打印的标签纸的长度是37.5mm (203dpi) ^MD x 指令名称: 浓暗度设置指令 指令作用: 经由温度控制来设置打印的浓暗度,设置值可以正负各30个区段(x),正值温度越高颜色越浓,反之越淡.本指令运行后,如果打印机电源关闭即回复到出厂设置值+10.在指令群中可以分段来控制浓淡,例如:你可以在程序前段先定义^MD6,然后在中段定义^MD-9,后段再定义^MD20,此时浓淡度会以10+6=16,16-9=7,7+20=27这三段程度印出,标签就会呈现"浓淡浓"的现象,至于浓淡程度则可视打印出的效果来调整至满意程度. ~JC: 指令名称:检测标签纸指令 指令作用:当您更换不同大小的纸张时,需重新检测纸张大小,以便在换纸后打印内容能在正确的位置,功能与硬件面版设置CALIBRATE一样,如果硬件上已有此项功能则可以在硬件上直接设置. ^SC a,b,c,d,e 指令名称: 设置通讯参数指令 指令作用: a : baud rate,可由110-19200 b : word length, 7或8个data bits c : parity,n=none 或e= even 或o=odd d : stop bits,1或2

斑马条码打印机控制指令说明

ZPL2(Zebra印表機語言)简易指令集.doc2008年07月30日星期三17:01 ^XA: 指令名?: 起始指令 指令左右: 當印表機接受到此命令時表示本段程式開始. ^XZ: 指令名稱: 終止指令 指令作用: 當印表機接受到此指令時即表示本段程式終止并開始列印 (注: 該兩指令需配對使用) ^XA--------起始指令 ^FO22,30^BY2,2,38^BCN,,N,N,N^FD COO2 PN MFGID DELLDATE SN ^FS^FO40,71^A0,24,32^FD COO2 - PN - MFGID - DELLDATE - SN ^FS ^FO45,98^BY2,2,38^BCN,,N,N,N^FD REV ^FS ^FO43,140^A0,24,32^FDREV REV ^FS ^FO240,125^A0,24,32^FDMade in COUNTRY ^FS ^PQ PRNQTY ^XZ--------終止指令

^LH x,y 指令名稱: 定義標簽起始位置指令 指令作用: (x,y)表示的含義是坐標值,但實際X和Y的值是點的數目.坐標值以每毫米包涵點數多少計算,依機型不同而有差異,如203dpi的機型,每1mm代表8點.如300dpi的機型,每1mm代表12點. 范例: ^LH30,30^FS 如果你的機型是用203dpi則表示: 在離卷紙邊 3.75* 3.75mm處為標簽起始點. 3.75是得來的. 203dpi 8點/mm 300dpi 12點/mm ^LL y 指令名稱: 定義標簽長度指令 指令作用: 限定使用在連續標簽紙,y以每毫米(mm)包含點數多少計算,每一機型計算方式與前頁一樣. 范例:

热敏打印机5个常见问题及解决办法

热敏打印机5个常见问题及解决办法 打印机出现问题时,我们第一想法是找打印机售后。不急不急,咱们先看看你的打印机是不是出现了这些问题。 1.打印机怎么装纸 不同品牌和型号的打印机结构不同,但基本操作方式是类似的,大家可以参考这个流程进行操作。 电子面单打印机内部基本架构图 卷纸安装: 1)按住顶盖插捎,打开打印机顶盖,用手拉开卷纸支架,将卷纸放在卷纸支架上的固定位置,按下卷纸支架固定锁; 2)再慢慢抽出一点纸张,将纸张从卡位哨中间穿过,根据纸张的宽度调整卡位哨之间的距离,接着把纸张拉一点到打印机的外部;

3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。 折叠纸安装: 1)按住顶盖插捎,打开打印机顶盖,将折叠纸放在打印机后方,打开折叠纸,将纸张从打印机后方的进纸口塞入; 2)用手拨开卷纸支架适当宽度,按住卷纸支架固定锁,将折叠纸从卡位哨中间穿过,接着将纸张拉一点到打印机外部; 3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。

2.打印的时候卡纸了怎么办 检查打印头是否有粘胶,积垢,若有即用酒精笔擦拭处理,同时取出起褶皱的纸,更换新纸。 3.打印出来的内容模糊 打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项高级——浓度调整,调衡打印浓度后再进行打印测试。 4.打印出来的内容在打印纸上不居中,左右偏移或者上下偏移,怎么处理 打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项——高级——水平偏移或者垂直偏移; 如果打印内容左右偏移的话修改一下水平偏移,内容上下偏移的话修改一下垂直偏移。 5.打印快递单总是打印1张空白1张怎么办 出现这种情况的话可能是打印机定位不准,请看看打印机的上下侦测器位置是否正确,再查看纸张类型是否设置成正确的的纸张类型,一般快递单是标签纸,有些客户可能设置成黑标纸。

58打印控制命令

打印控制命令 概述 LANPOS5896打印机提供了ESC/POS打印命令集。 各个命令的描述形式如下: 打印命令功能 格式:ASCII:以标准ASCII字符序列表示 十进制:以十进制数字序列表示 十六进制:以十六进制数字序列表示 说明:该命令功能和使用说明 例子:为了更容易理解该命令会列出一些例子。 打印命令 LF 打印并换行 格式:ASCII:LF 十进制:10 十六进制:0A 说明:打印行缓冲器里的内容并向前走纸一行。当行缓冲器空时只向前走纸一行。ESC J 打印并走纸N点行 格式:ASCII:ESC J n 十进制:27 74 n 十六进制:1B 4A n 说明:打印行缓冲器里的内容,并向前走纸n点行(即n/203英寸)。 N=0~255。 该命令只本行打印有效,不改变ESC 2,ESC 3命令设置的行间距值。 示例: 行间距设置命令

ESC 2 设置字符行间距为1/6英寸 格式:ASCII:ESC 2 十进制:27 50 十六进制:1B 32 说明:设置行间距为1/6英寸 ESC 3 设置行间距为n点行(n/203英寸) 格式:ASCII:ESC 3 十进制:27 51 十六进制:1B 33 说明:设置行间距为n点行。n=0~255。 LANPOS5896打印机的每点距为1/203英寸,即该命令设置行间距为n/203英寸。 默认值为n=30。 示例: 字符打印命令 ESC !设置字符打印方式 格式:ASCII:ESC !N 十进制:27 33 N 十六进制:1B 21 N 说明:ESC !n是综合性的字符打印方式设置命令,用于选择打印字符的大小。打印参数n的每位定义为: n的默认值为0,即字符不放大。 ESC SO 设置字符倍宽打印

解析小票打印机常见问题及解决方法

解析小票打印机常见问题及解决方法 1.串口打印机联机会打印乱码吗? 答:PC主机所设置的波持率与打印机一致不会打印乱码. 2.针式打印机自检打印乱码或红灯闪? 答:如打印机装有色带,打印异常则可能是色带太紧,请更换色带; 3.打印机不开钱箱? 答:请检查打印机钱箱联接钱箱接口是否规范, 若符合且钱箱联接正确, 请送指定维修点维修。 4.打印机不检纸? 答:机芯传感器太脏, 请用软毛刷清洁传感器, 若清洁后依旧不能检纸;请送指定维修点维修。 5.打印机用了一段时间,联机打印乱码? 答:打印机接口板损坏,请更换通讯接口板或送指定维修点维修。 6.控制面板上的指示灯不亮? 答:检查电源线是否正确插入打印机、电源适配器和电源插座,检查打印机电源开关是否打开,若这些都正常,请送指定维修点维修。 7.针式打印如何使用黑标定位? 答:将打印机(底部)DIP开关SW-1位设为ON,打印纸黑标位于打印纸正面右侧(可选黑标位于打印纸正面左侧) 8.针式打印机有声响,但并没有打印? 答:色带盒安装不正确,请正确安装色带盒, 如色带已磨损,请更换新色带盒。 9.针式打印机打印汉字模糊? 答:将打印机底部的DIP开关SW-3设置为ON或调整机芯H行。 10.针式系列打印机是否支持打印服务器联网打印? 答:针打系列打印机都支持打印服务器联网打印。 11.GP系列的打印机支持语言有哪些? 答:GP系列打印机有简体中文、繁体中文、韩文、日文和21种国际语言字体。 12.打印机打印一段时间后,出现红灯闪(有打印纸情况下)? 答:可能是打印头过热,如果打印一段时间后不能正常打印,则是打印头温度过高,否则送指定维修点维修。 13.如何安装网络共享打印机的驱动程序?

Zebra条码打印机编程命令

Zebra条码打印机编程命令 条码打印机是一种专业的打印设备,其打印实现方式与普通的激光、喷墨或针式打印机有所不同,世界各大条码打印设备厂商生产的打印机都采用了各自不同的打印语言以实现其打印,如Zebra系列的ZPL,Eltron的EPL,Datamax的DPL等,与普通打印方式相比,采用打印语言的优点在于速度快,精度高,但由于没有统一的标准打印语言,使得用户在使用不同机器时会产生一定的麻烦,好在各种打印语言的语法比较类似,上手也是比较简单的。 目前的条码打印主要采用专业的商用条码打印软件,使用方便、简单,功能强大,且提供了对各类型条码打印设备的接口,适用于需经常变换打印格式、容的用户,如专业印刷厂商等,但此类软件的价格也较昂贵。对于一些采用了企业管理系统的用户,其打印标签的格式通常已较固定,因此可在软件系统中嵌入条码打印部分。一般来说,可采用以下几种方式:直接使用条码打印机的条码语言编写程序;采用各种专业控件提供商编制的条码控件;使用一些高级条码打印软件,如CodeSoft、LabelView提供的ActiveX技术等。这几种方式在方便性、精确性及经济性等方面各有其优缺点,用户可根据需要自行选择,这里,主要对第一种方式给出较为详细的使用方法。 ZPLII是Zebra系列打印机的打印语言,在ZPL的基础上做了一定的更新,其语法通俗易懂,在这里对其条码、文字、图形打印部分给予一一介绍。 基本标签示例: ^XA‘标签格式开始命令 ^LH30,30‘Label Home position设置标签起始参考点坐标为30,30,默认为0,0 ^FO20,10^AD^FDEXAMPLE^FS‘^FO20,10-设置数据域起始坐标,距参考点 20,10 ^AD-设定字体为D(部字体) ^FD-数据域开始命令 EXAMPLE实际打印容 ^FS-数据域分隔命令 ^FO20,60^B3^FDAAA001^FS ‘^B3-选择条码类型为39码

ESC打印控制命令集

ESC打印控制命令集 概述 LANPOS5896打印机提供了ESC/POS打印命令集。 各个命令的描述形式如下: 打印命令功能 格式:ASCII:以标准ASCII字符序列表示 十进制:以十进制数字序列表示 十六进制:以十六进制数字序列表示 说明:该命令功能和使用说明 例子:为了更容易理解该命令会列出一些例子。 打印命令 LF 打印并换行 格式:ASCII:LF 十进制:10 十六进制:0A 说明:打印行缓冲器里的内容并向前走纸一行。当行缓冲器空时只向前走纸一行。ESC J 打印并走纸N点行 格式:ASCII:ESC J n 十进制:27 74 n 十六进制:1B 4A n 说明:打印行缓冲器里的内容,并向前走纸n点行(即n/203英寸)。 n=0~255。

该命令只本行打印有效,不改变ESC 2,ESC 3命令设置的行间距值。 示例: 行间距设置命令 ESC 2 设置字符行间距为1/6英寸 格式:ASCII:ESC 2 十进制:27 50 十六进制:1B 32 说明:设置行间距为1/6英寸 ESC 3 设置行间距为n点行(n/203英寸) 格式:ASCII:ESC 3 十进制:27 51 十六进制:1B 33 说明:设置行间距为n点行。n=0~255。 LANPOS5896打印机的每点距为1/203英寸,即该命令设置行间距为n/203英寸。 默认值为n=30。 示例:

字符打印命令 ESC !设置字符打印方式 格式:ASCII:ESC !N 十进制:27 33 N 十六进制:1B 21 N 说明:ESC !n是综合性的字符打印方式设置命令,用于选择打印字符的大小。打印参数n的每位定义为: n的默认值为0,即字符不放大。 ESC SO 设置字符倍宽打印 格式:ASCII:ESC SO 十进制:27 14 十六进制:1B 0E 说明:在一行内该命令之后的所有字符均以正常宽度的2倍打印;该命令可以用回车或DC4命令删除。 ESC DC4 取消字符倍宽打印 格式:ASCII:ESC DC4 十进制:27 20 十六进制:1B 14 说明:执行些命令后,字符恢复正常宽度打印。

热敏打印机的驱动安装

科密T58、T60热敏打印机的驱动安装 科密T58、T60系列打印机在使用泰格、思讯、百威等行业软件时,由于行业软件自带了打印驱动,一般不需要另装驱动,只需要在软件中选择相应的58mm打印机即可。 如果软件不能直接设置打印机型号,就需要安装T58打印机驱动(T58驱动也适用于T60),安装驱动后将打印机设置为默认打印机即可。在打印机驱动的属性里还可以设置使用图形或硬字库打印,推荐使用硬字库打印方式提高打印速度和质量。 驱动安装操作如下: 1.添加打印机 (1)点击【开始】菜单,选择【打印机和传真】,如图1所示。 图1 (2)系统打开【打印机和传真】窗体。点击窗体右边【打印机任务】下的“添加打印机”一项。如图2所示。 图2 (3)系统弹出【添加打印机向导】对话框,如图3所示。点击【下一步】。

图3 (4)在弹出的向导对话框中选择“连接到此计算机的本地打印机”,并去掉“自动检测并安装即插即用打印机”,如图4所示。然后点击【下一步】。 图4 (5)在弹出的向导对话框中选择“使用以下端口”,如图5所示。如果是并口打印机请选择LPT1(即并口1),如果是串口打印机请选择COM1或COM2(具体要根据打印机连接电脑的端口选择)。然后点击【下一步】。

图5 (6)在弹出的向导对话框中点击【从磁盘安装】,如图6所示。 图6 (7)系统弹出【从磁盘安装】对话框,如图7所示。

图7 (8)点击【浏览】,选中随机光盘的“T58 T60 for 2k”文件夹,点【打开】打开文件夹,然后选中“T58-2K.inf”文件,再点击【打开】。如图8所示。 图8 (9)路径会自动出现在对话框的“厂商文件复制来源”上,如图9所示。然后点击【确定】。

打印机ESCPOS控制指令

打印机E S C P O S控制 指令

HDD-80260打印机ESC/POS 控制指令 ESC/POS 控制指令 HT 横向跳格 如果下一个跳格位置没有设置,该指令被忽略。 如果下一个横向跳格位置超越打印区域,将当前位置设置为[打印宽度+1]。 水平跳格位置由指令ESC D 来设置。 如果接收到此命令时当前位置在[打印宽度+1],打印机执行当前行缓冲区满动作 并且将打印位置移到下一行的起始位置。 默认值跳格位置是每8 个标准ASCII 字符(12×24)字符跳一格。 当前行缓冲区满时,打印机执行下列动作: 标准模式下,打印机打印当前行内容并将打印位置置于下一行的起始位置。 页模式下,打印机进行换行并将打印位置置于下一行的起始位置。 LF 打印并走纸一行 该指令将当前位置置于行首。 FF 打印并走纸

打印后清除缓冲区的内容。 由ESC W 指令设置的打印区域被重置为默认设置。 打印机不执行切纸动作。 该指令将当前位置置于行首。 该指令只在页模式下有效。 CR 打印并回车 设置打印位置为行首。 串行接口模式下该指令被忽略。 并口模式下该指令是否有效由打印机配置决定。 CAN 页模式下删除打印缓冲区内容 该指令只在页模式下有效。 如果先前设定区域与当前区域有重叠部分,重叠部分也被删除。

DLE DC4 n m t 实时产生钱箱开启脉冲 当打印机正在执行钱箱开启命令(ESC p 或 DEL DC4)时,该命令被忽略。 串口模式下,打印机接收该指令后立即执行。 并口模式下,打印机忙的时候该指令不执行。 如果打印数据中包含和此指令相同的数据,则这些数据将被当作该指令执行。用 户必须考虑到这种情况。 该指令尽量不要插在2 个或更多字节的指令序列中。 即使打印机被ESC=(选择外设)命令设置为禁止,该指令依然有效。

斑马条码打印机控制指令说明

ZPL2(Zebra 印表機語言)简易指令集.doc 2008年07月30日星期三 17:01 ^XA: 指令名?:起始指令 指令左右: 當印表機接受到此命令時表示本段程式開始. ^XZ: 指令名稱: 終止指令 指令作用: 當印表機接受到此指令時即表示本段程式終止并開始列印 (注: 該兩指令需配對使用) ^XA--------起始指令 ^FO22,30^BY2,2,38^BCN,,N,N,N^FD COO2 PN MFGID DELLDATE SN ^FS ^FO40,71^A0,24,32^FD COO2 - PN - MFGID - DELLDATE - SN ^FS ^FO45,98^BY2,2,38^BCN,,N,N,N^FD REV ^FS ^FO43,140^A0,24,32^FDREV REV ^FS ^FO240,125^A0,24,32^FDMade in COUNTRY ^FS ^PQ PRNQTY ^XZ--------終止指令 ^LH x,y 指令名稱: 定義標簽起始位置指令 指令作用: (x,y)表示的含義是坐標值,但實際X和Y的值是點的數目.坐標值以每毫米包涵點數多少計算,依機型不同而有差異,如203dpi的機型,每1mm代表8點.如300dpi的機型,每1mm代表12點. 范例: ^LH30,30^FS 如果你的機型是用203dpi則表示:在離卷紙邊3.75*3.75mm處為標簽起始點.3.75是30/8得來的. 203dpi 8點/mm 300dpi 12點/mm ^LL y 指令名稱:定義標簽長度指令 指令作用: 限定使用在連續標簽紙,y以每毫米(mm)包含點數多少計算,每一機型計算方式與前頁一樣. 范例: ^LL300^FS

ESC打印机的控制命令

ESC打印机的控制命令 计算机能够完成数值计算、数据处理、图象设计、过程控制等工作都是在一种或多种计算机语言的指挥下进行的。同样,打印机各种部件的运行和动作,各种打印动作的实现、在各种介质上打印出图形和字符,也是由一套能为打印机所识别的语言(命令)来进行控制。通常将能完成上述功能的命令的集合成为打印机控制命令(Print Control Command)为了更好的熟知打印机控制命令,我们需先行了解打印机的数据处理流程。 二、打印机的控制命令 目前主流的打印机控制命令主要有以下三种: EPSON公司的ESC PK命令集 HP公司的PCL命令集 Adobe公司的PostScript(简称PS)命令集 ESC PK命令集是针式打印机(尤其是滚筒方式打印)领域事实上的工业标准;PCL命令集是中、低档激光打印机、喷墨机印机领域的工业标准;PS命令集则是高档排版、出版领域的应用标准。 1、名词解释 1)控制命令:对打印机进行各种处理和控制动作,并为打印机所识别的命令序列。 2)仿真;控制打印机按照某种控制命令进行工作,就称为这个控制命令的仿真。3)驱动程序;转换文件成为某种特定控制命令描述的文档,并进行输出的程序。注:驱动程序就是打印控制命令的形体表现,其本质就是按照某一控制命令的格式,将计算机的数据进行翻译和组织,并形成相应的字符和位图的序列送往打印机。 2、命令分类 打印机控制命令的种类可分为二大类:基本控制命令和扩充命令。

1)基本命令(Basic Control Code) 基本命令其实就是ASCII码中规定的具有打印功能的控制命令,它的特点是均用一个ASCII码(一个字节)代表,使用比较方便。它的数值范围如下:ASCII: 00H ~ 20H 2)扩充命令(Extension Control Command) 基本命令仅提供标准和基本的控制功能。要实现字型大小、各种修饰功能、行与列间距控制、格式设定等较复杂的控制功能,就必须使用扩充命令。扩充命令一般由两个或两个以上的字节组成,其格式有如下几种形式: Code CH Code CH1[CH2] Code CH1[CH2][Parm1 …Parm1] Code CH1[CH2][Parm1 …Parm1]CH3 Code: 控制命令的引导代码 CH: 表示控制字符 Parm: 系列参数 例: 设定图象打印方式 ASCII码: ESC * m n1 n2 十进制码: 27 42 m n1 n2 十六进制码1B 2A m n1 n2 m: 图象方式 水平密度:60 DPI ~ 360DPI 垂直密度:60 DPI ~ 360DPI 每列点数:8点~ 48点 计算公式:列数=n1+n2*256 这里:“ESC“即为该控制命令的引导代码,而“*”和“m”为表示为图象命令的控制命令,“n1,n2”则为图象的系列参数。 3)命令格式类别 作为针式打印机的控制命令类别,有如下几种序列的表示方式: * ESC序列

迅普微型打印机指令集

迅普公司简介 北京迅普电子技术公司是专门从事微型打印机研发、设计、生产、销售和技术服务的专业公司,已有十余年经营历史。可提供针式或热敏打印方式的面板式、台式、便携式、红外、商业POS打印机等众多系列和品种的微型打印机。产品覆盖面广,可满足各种微型打印的需要。 迅普(SIUPO)微型打印机素以制作精湛、品种齐全、可靠性高、外形美观、功能实用和不断创新为特点,产品已处于国内微型打印机技术的前沿,更具有多项专利技术的支持,深得各界用户的信赖和大力支持。迅普(SIUPO)产品已广泛应用于多种行业,销售量与日俱增。 北京迅普电子技术公司拥有雄厚的专业技术力量,还可以根据客户要求“量体裁衣”,提供特种微型打印解决方案,灵活地设计生产各种特定场合的特种、专用微型打印机。公司本着用户第一的思想,急用户所急,多年来已经为不同行业、不同部门,按照客户不同要求,设计生产了大量的非标准和系列外的微型打印机,极大地满足了用户的要求和急需,深受用户的欢迎和获得了良好的赞誉。 作为专业的微型打印机生产公司,不断的研究生产出新的产品是公司生存的根本,迅普电子技术公司在今后将会不断的推出新的产品。 使用专业厂家产品,可保证产品和技术的延续,无后顾之忧。在您购买迅普公司生产的微型打印机以后,您就成为公司的客户,记录在公司客户档案中。将获得迅普公司长期提供的技术支持和售后服务。感谢您使用北京迅普公司生产的迅普(SP)系列微型打印机。请您在使用打印机之前详细阅读该产品配套的产品使用说明书。 第四章打印命令

SP系列打印机提供了36条打印命令。这些命令规定了打印机的功能,如选择字符类别和字符集、定义格式、放大或缩小字符、打印汉字、打印点阵图形和定义用户可定义字符等。 打印命令是由一字节控制码或ESC控制码序列组成。字节控制码用十进制或十六进制数字序列表示,ESC控制码是以“ESC”码开头,后跟其它字符码。 SP系列打印机打印控制码是在参考IBM和EPSON打印机的基础上设计的。因此,它能够和大多数打印机兼容。 4.1 汉字打印命令: SP系列打印机自带国标一、二级硬汉字库(12×12点阵或16×16点阵),可打印汉字库中全部汉字。16×16点阵字库还可选择打印16×16,8×16、16×8、8×8点阵汉字,不同点阵汉字可同行打印,汉字与ASCII 字符可以同行混合打印。汉字打印使用双字节标准机内码(或国标码)调用。 汉字打印命令包括进入和退出汉字打印、执行和取消汉字倍宽打印和设置汉字点阵打印规格等功能,分别叙述如下: (1) 进入汉字打印命令 格式: ASCII: FS & 十进制: 28 38 十六进制: 1C 26 打印机接收到以上命令后,将从5×7点阵ASCII字符打印状态转换到16×16点阵的汉字打印状态。汉字代码是2字节对应一个汉字的标准机内码。 在执行汉字打印命令时,打印机只接接受以下有关汉字打印的命令:

佳博热敏打印机常见问题

1.切刀没切纸动作 答:首先打印一张开机自检页看看最后切刀有无动作,无动作则检查机器底部拨位开关第一位开关,保证处于OFF的位置,仍然无动作考虑切刀硬件故障返修。 2.蜂鸣器不响 答:首先开机状态下按开上盖听听机器有没有蜂鸣报错,若无则检查机器底部拨位开关第二位开关,保证处于ON的位置,有蜂鸣报错后在驱动里打印一张联机测试页听听最后有无蜂鸣提醒,若无则调整驱动首选项内的高级,出纸盒或者收纸器一项,选一种提醒鸣响的方式再打印。 3.打印字迹很淡 答:首先建议用棉签沾酒精清洁一次打印头,再打印看看效果,如果依旧很淡建议换一种热敏纸试一试,如果字迹还是淡则调整一下机器底部拨位开关的第三位开关,拨到ON的位置,会使用较深的浓度来打印,如果上述过程都做过仍不见效可能就是打印机使用年限长,打印头老化导致的,可以寄回更换热敏片。 4.驱动自动安装过程会出错 答:如果驱动的自动安装过程出错是因为系统的一些服务关闭导致的,可以通过手动添加驱动的方式安装打印机驱动。 5.打开打印机电源没反应 答:首先确认电源适配器的通电指示灯(绿灯)有没有亮,有亮检查一下电源线有没有接到打印机的电源接口,方向是否正确,打开电源开关按走纸键或者打开上盖看看有无报错,如果都没有考虑主板的电源模块被烧坏需要返修。 6.按走纸键没反应 答:试试走纸键的手感是否很差,试试关机再开能否按动进纸,可以归类为硬件问题,影响使用则需要返修。 7.装好了纸盖上上盖机器一直在报错 答:打开上盖用点力盖下去,用手按住上盖看看还会不会报错,试着把底部拨位开关第一位切刀功能关闭(打到ON的位置),看看会不会报错,同样可以归类为硬件问题,影响使用则需要返修。 8.机器在切纸的时候会在一张完整的单据中间某个位置切一刀或几刀 答:需要到打印首选项内选择纸张/质量,纸张来源处选择Document(Cut),再试着打印,如果仍是这种情况则是用户使用的软件造成的,需要咨询软件商。 9.80打印机黑标怎么使用 答:黑标需要用工具开启然后设置打印位置和切纸位置,也可以安装对应的黑标驱动使用。 10.80打印机的黑标是在哪个位置

pos小票打印机常见问题解答

●打印机pos小票常见问题解答 1.怎样查找打印机与主机数据传输故障的原因? 答:关机状态下按住退纸键再接通打印机电源进入数据Dump模式,次模式时打印机以十六进制方式打印出所有输入至打印机的代码,将电源断开后重新接通即可恢复正常模式。 2.联机时联机灯(绿色)总闪烁 答:此时打印机处于脱机状态,取下打印机上盖将压纸杆压紧即可恢复正常。 3.如何自检? 答:在关机状态下,按住联机键不放后打开电源(开机)。 4.MS-DOS应用程序下,AB-210K应选择什么驱动? 答:在MS-DOS应用程序下AB-210K不需要驱动程序。 5.如何控制打印机打印的字体与字型 答:打印机的字符可以以倍宽、倍高打印。选择倍高方式使所有字符增高一倍,选择倍宽方式使所有字符倍宽增加一倍。倍高指令ESC w n{十进制码: 27 119 n},倍宽指令ESC so{十进制码: 27 }。同时,有特殊字符类型的选择(如可以选择普通字体打印、空心字体打印、阴影字体打印、空心阴影字体打印)。 6.打印机出现"咔、咔"的噪音,应该如何处理? 答:打印机出现"咔、咔"声主要是因为打印机的电机出现故障,或者是字车电机在来回运动时由于磨擦力太大而造成打印头失步,打印出来的字符也可能会重叠。如出现类似这种情况的,必须到指定的维修点维修。 7.打印的样张出现深浅不一的现象,应该如何处理? 答:出现这种故障是由于打印色带不转造成的。色带不转是字车架里的铁压片变形造成的,出现这种情况必须到指定的维修点维修。 8.打印的样张出现上半截清楚,下半截不清楚等现象,应如何处理? 答:出现这种故障是由于色带架放置得不平整造成的。在这种情况下得重新装好色带架。在装色带架的时候应用力压平,听到"咔"的一声才可以,同时在装好后来回移动打印头,使得色带拉紧。 9.打印机的控制面板上的ON-LINK灯在闪(打印机打印不了),应如何处理? 答:出现这种现象表示打印机出错。在这种情况下只要把打印机初始化(初始化方法详细操作见第4条)就可以了 10.打印机无反应,三个灯都在亮着,该如何处理? 答:如出现这种情况,必须到指定维修点维修。 11.打印机的机芯出现倾斜、错位,应如何处理? 答:出现这种情况是因为机器在运输途中由于剧烈振动使得机芯抛开,造成机芯倾斜、错位。这种情况建议到指定维修点维修。

C#控制打印机(直接发送打印机命令到打印机)

C#控制打印机(直接发送打印机命令到打印 机) 一个打印机控制类,很有用的,其中使用了windows api控制lpt端口,对条码打印机的控制方法如下:将打印机的命令写到一个文件里,再使用之。 ******************************************************************************* ******************************************************* //代码: // using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace LPTControls { public class LPTControls { [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; intInternalHigh; int Offset; intOffSetHigh; inthEvent; } [DllImport("kernel32.dll")] private static extern intCreateFile(string lpFileName, uintdwDesiredAccess, intdwShareMode, intlpSecurityAttributes, intdwCreationDisposition, intdwFlagsAndAttributes, inthTemplateFile); [DllImport("kernel32.dll")] private static extern boolWriteFile(inthFile, byte[] lpBuffer, intnNumberOfBytesToWriter, out intlpNumberOfBytesWriten, out OVERLAPPED lpOverLapped); [DllImport("kernel32.dll")] private static extern boolCloseHandle(inthObject); privateintiHandle; //打开LPT 端口 public bool Open() {

热敏打印机5常见问题及解决办法

1.打印机怎么装纸 不同品牌和型号的打印机结构不同,但基本操作方式是类似的,大家可以参考这个流程进行操作。 电子面单打印机内部基本架构图 卷纸安装: 1)按住顶盖插捎,打开打印机顶盖,用手拉开卷纸支架,将卷纸放在卷纸支架上的固定位置,按下卷纸支架固定锁; 2)再慢慢抽出一点纸张,将纸张从卡位哨中间穿过,根据纸张的宽度调整卡位哨之间的距离,接着把纸张拉一点到打印机的外部; 3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。 折叠纸安装: 1)按住顶盖插捎,打开打印机顶盖,将折叠纸放在打印机后方,打开折叠纸,将纸张从打印机后方的进纸口塞入; 2)用手拨开卷纸支架适当宽度,按住卷纸支架固定锁,将折叠纸从卡位哨中间穿过,接着将纸张拉一点到打印机外部; 3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。 2.打印的时候卡纸了怎么办 检查打印头是否有粘胶,积垢,若有即用酒精笔擦拭处理,同时取出起褶皱的纸,更换新纸。 3.打印出来的内容模糊

打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项高级——浓度调整,调衡打印浓度后再进行打印测试。 4.打印出来的内容在打印纸上不居中,左右偏移或者上下偏移,怎么处理 打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项——高级——水平偏移或者垂直偏移; 如果打印内容左右偏移的话修改一下水平偏移,内容上下偏移的话修改一下垂直偏移。 5.打印快递单总是打印1张空白1张怎么办 出现这种情况的话可能是打印机定位不准,请看看打印机的上下侦测器位置是否正确,再查看纸张类型是否设置成正确的的纸张类型,一般快递单是标签纸,有些客户可能设置成黑标纸。

针式打印机控制命令汇总

ESC P、ESC P/K指令LQ-300K LQ-300K+ LQ-305K LQ- 580K(+) LQ-630K LQ-635K LQ- 670K+ /K+T LQ-680K /K PRO LQ- 1600KIII /KIII+ LQ-1600K4(+) LQ-1900KII(+) DLQ-3500K DLQ-3250K ASCII控制 一般指令控制功能初始化打印机ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ ESC @ 单向打印ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U ESC U CSF模式控制ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM ESC EM 蜂鸣器BEL BEL BEL BEL BEL BEL BEL BEL BEL BEL BEL BEL BEL 删除行缓冲区CAN CAN CAN CAN CAN CAN CAN CAN CAN CAN CAN CAN CAN 退格BS BS BS BS BS BS BS BS BS BS BS BS BS 删除DEL DEL DEL DEL DEL DEL DEL DEL DEL DEL DEL DEL DEL 联机DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 DC1 脱机DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 DC3 打印头归位ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < ESC < MSB控制 ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # ESC >,ESC =,ESC # 进纸/退纸控制功能换页FF FF FF FF FF FF FF FF FF FF FF FF FF 换行LF LF LF LF LF LF LF LF LF LF LF LF LF n/180英寸正向进 纸 ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J ESC J n/180英寸反向进 纸 ESC j 设定1/8英寸行间 距 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 ESC 0 设定1/6英寸行间 距 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 ESC 2 设定n/180英寸行 间距 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 ESC 3 设定n/60英寸行 间距 ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A ESC A 设定n/360英寸行 间距 ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + ESC + 回车CR CR CR CR CR CR CR CR CR CR CR CR CR

通用小票打印程序

怎样做出通用的pos小票打印程序 POS小票打印机分为热敏和针式俩种。 打印纸的宽度分为58毫米、76毫米和80毫米三种。 打印接口分为:串口、并口、USB和网口(以太网)。 热敏打印机速度较快,打印的时候噪音少,针打可以使用多联纸自动复印。 热敏打印机价格一般比较便宜,不需要频繁地更换色带。 并口打印机,可直接"端口输出",不需要安装打印机的驱动程序。 几乎所有的POS小票打印机都可以兼容EPSON的ESC POS打印机指令。 const // 末尾走纸几行 c_run_paper_lines = 6; // ESC指令开钱箱 c_OpenMoneyBoxCommand = CHR(27) + CHR(112) + CHR(0) + CHR(17) + CHR(8); // ESC指令自动切纸 c_cut_paper = CHR(29) + CHR(86) + CHR(66) + CHR(0); type // usb接口票打用 TOutBufPassThrough = record nDataLen: word; sEscData: array [0 .. 1024] of AnsiChar; end; // usb接口开钱箱 procedure OpenUSBMoneyBox; var prt: TPrinter;

esc: TOutBufPassThrough; begin try prt := Printers.Printer; prt.beginDoc; esc.nDataLen := Length(c_OpenMoneyBoxCommand); strpCopy(esc.sEscData, c_OpenMoneyBoxCommand); windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil); prt.endDoc; except end; end; // usb接口切纸 procedure usbCutPaper; var prt: TPrinter; esc: TOutBufPassThrough; begin try prt := Printers.Printer; prt.beginDoc; esc.nDataLen := Length(c_cut_paper); strpCopy(esc.sEscData, c_cut_paper); windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil); prt.endDoc; except end; end; procedure TfrmReprint.Print80; var sPort: string; RPrinter: TextFile; i: Integer;

相关文档
最新文档