我现在需要打印榜单,采用的是epson lq300k,由于榜单大小问题,所以打印前最好让其进行一次退纸进纸过程,这样打印出来的位置就比较好,可是在程序中如何向打印机发送指令让它操作呢?
我找了一个星期的论坛了 大概发现是采用esc指令方式,于是采用api函数,const int OPEN_EXISTING = 3;
string prnPort = "LPT1";
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile); public POSPrinter(string prnPort)
{
this.prnPort = prnPort;//打印机端口
}
public string PrintLine(string str)
{ IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
if (iHandle.ToInt32() == -1)
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
sw.write("ESC @");
sw.Write("ESC J");
sw.Close();
fs.Close();
return "";
}
可是打印机没有任何反应,哪怕我是打印普通的问题不是esc指令,打印机也没有反应,请问问题出在哪里?是我发送的问题吗?还是我连接出了问题?
第二个问题:esc指令中 进纸 退纸的指令是什么?
恳求高手了,请写出较详细的代码。
我找了一个星期的论坛了 大概发现是采用esc指令方式,于是采用api函数,const int OPEN_EXISTING = 3;
string prnPort = "LPT1";
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateFile(string lpFileName,
int dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile); public POSPrinter(string prnPort)
{
this.prnPort = prnPort;//打印机端口
}
public string PrintLine(string str)
{ IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
if (iHandle.ToInt32() == -1)
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
sw.write("ESC @");
sw.Write("ESC J");
sw.Close();
fs.Close();
return "";
}
可是打印机没有任何反应,哪怕我是打印普通的问题不是esc指令,打印机也没有反应,请问问题出在哪里?是我发送的问题吗?还是我连接出了问题?
第二个问题:esc指令中 进纸 退纸的指令是什么?
恳求高手了,请写出较详细的代码。
if (iHandle.ToInt32() == -1)
应该是if (!iHandle.ToInt32() == -1)
那你有c# 或者其他.net语言的代码范例吗?我想实现通过电脑控制
我用vb发送指令可以使打印机动作,可是我想在.net语言环境下实现,采用我原先的代码没有办法,你有这方面的代码吗?
万分感谢
谢谢楼主
[email protected]