[急盼]求教VFP中如何使用ESC/p指令控制打印机???

lgtth 2013-10-09 02:01:19
正在做车票打印工具,因车票纸张太小(7.8*13),使用报表无法正确打印。
想使用ESC直接控制打印机打印,不知VFP中怎样使用ESC指令到打印机,
原付费求ESC打印示例。使用的打印机为EPSON LQ300KII。xp系统,VFP SP2
谢谢!
...全文
1806 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2013-10-14
  • 打赏
  • 举报
回复
引用 22 楼 lgtth 的回复:
[quote=引用 13 楼 apple_8180 的回复:] 帖一下清风曾经的例子:
小票打印机不需要驱动,直接用控制代码(以下是使用商场超市的针打,基本上都一样的。你买打印机时会告诉你控制代码的)
by:dfwxj
*lcPortName=Allt(sysinfo.pport)
lcPortName='LPT1' && 并口打印机所接的并口名称
或
lcPortName='COM1' && 串口打印机所接的串口名称
lnPortHandle=Fopen(lcPortName,2)
If lnPortHandle<0
	Messagebox('无法打开打印机!',64,'信息')
	Return
Endi
Wait "正在打印, 请稍等...." Window Nowait
=Fputs(lnPortHandle,Chr(27)+Chr(64)) &&初始化

*以下重复的代码是倒走纸的,因为撕纸后,会留较长一段,倒走纸可以节约用纸
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
*-------------------------------------------

=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(1)) &&粗体
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(12)) &&
=Fputs(lnPortHandle," 欢迎光临佳人苑!")
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(0))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,' 时尚佳人苑 美丽人世间')
=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(0))
=Fputs(lnPortHandle,'客户:'+XXX+' 日期:'+Ttoc(Datetime()))
=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,' 货号 品名 数量 单价 金额')
=Fputs(lnPortHandle,'--------------------------------------') &&每行38字符

Select pdata
Scan For !Deleted()
	=Fputs(lnPortHandle,hh+Left(pm,10)+Str(cksl,4)+Str(lsj,8,2)+Str(ckje,8,2))
Endscan

=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,'营业员:YYY+' 实结金额:NNN')
=Fputs(lnPortHandle,'备注1')
=Fputs(lnPortHandle,'备注2')

=Fputs(lnPortHandle,Chr(27)+Chr(100)+Chr(6)) &&出纸

=Fclose(lnPortHandle)
Wait Clear
*Thisform.command2.SetFocus
使用示例解决了车票打印问题.但还是有一些地方不明白. 比如示例中关于退纸的那部分运行后打印机无任何反映,而且打印键进/退纸钮失效.我想可能是ESC指令不正确吧. 想请教十豆三老师: FF [名称] 打印并走纸到下页首 [格式] ASCII码 FF 这个指令该怎样书写,是chr(27)+chr(70)+chr(70)吗?[/quote] 这些命令我也没有用过,不知道是不是不同打印机会略有不同,建议你用我 11 楼的方法。
lgtth 2013-10-14
  • 打赏
  • 举报
回复
引用 24 楼 apple_8180 的回复:
[quote=引用 22 楼 lgtth 的回复:] [quote=引用 13 楼 apple_8180 的回复:] 帖一下清风曾经的例子:
小票打印机不需要驱动,直接用控制代码(以下是使用商场超市的针打,基本上都一样的。你买打印机时会告诉你控制代码的)
by:dfwxj
*lcPortName=Allt(sysinfo.pport)
lcPortName='LPT1' && 并口打印机所接的并口名称
或
lcPortName='COM1' && 串口打印机所接的串口名称
lnPortHandle=Fopen(lcPortName,2)
If lnPortHandle<0
	Messagebox('无法打开打印机!',64,'信息')
	Return
Endi
Wait "正在打印, 请稍等...." Window Nowait
=Fputs(lnPortHandle,Chr(27)+Chr(64)) &&初始化

*以下重复的代码是倒走纸的,因为撕纸后,会留较长一段,倒走纸可以节约用纸
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
*-------------------------------------------

=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(1)) &&粗体
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(12)) &&
=Fputs(lnPortHandle," 欢迎光临佳人苑!")
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(0))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,' 时尚佳人苑 美丽人世间')
=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(0))
=Fputs(lnPortHandle,'客户:'+XXX+' 日期:'+Ttoc(Datetime()))
=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,' 货号 品名 数量 单价 金额')
=Fputs(lnPortHandle,'--------------------------------------') &&每行38字符

Select pdata
Scan For !Deleted()
	=Fputs(lnPortHandle,hh+Left(pm,10)+Str(cksl,4)+Str(lsj,8,2)+Str(ckje,8,2))
Endscan

=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,'营业员:YYY+' 实结金额:NNN')
=Fputs(lnPortHandle,'备注1')
=Fputs(lnPortHandle,'备注2')

=Fputs(lnPortHandle,Chr(27)+Chr(100)+Chr(6)) &&出纸

=Fclose(lnPortHandle)
Wait Clear
*Thisform.command2.SetFocus
使用示例解决了车票打印问题.但还是有一些地方不明白. 比如示例中关于退纸的那部分运行后打印机无任何反映,而且打印键进/退纸钮失效.我想可能是ESC指令不正确吧. 想请教十豆三老师: FF [名称] 打印并走纸到下页首 [格式] ASCII码 FF 这个指令该怎样书写,是chr(27)+chr(70)+chr(70)吗?[/quote] 这些命令我也没有用过,不知道是不是不同打印机会略有不同,建议你用我 11 楼的方法。[/quote] 谢谢~
lgtth 2013-10-13
  • 打赏
  • 举报
回复
感谢各位的指导.今天马上去试. 现在我用的办法打张票后撕票在退票开始打下一张,无形中增加了工作量. 非常感谢!
lgtth 2013-10-13
  • 打赏
  • 举报
回复
引用 16 楼 dkfdtf 的回复:
myfll 的函数 PrintStringDirect 可以直接输出到打印机 用法: PrintStringDirect(cString, cPrintName, cPort)
谢谢!使用函数后仍然会发送到打印队列中.
lgtth 2013-10-13
  • 打赏
  • 举报
回复
引用 13 楼 apple_8180 的回复:
帖一下清风曾经的例子:
小票打印机不需要驱动,直接用控制代码(以下是使用商场超市的针打,基本上都一样的。你买打印机时会告诉你控制代码的)
by:dfwxj
*lcPortName=Allt(sysinfo.pport)
lcPortName='LPT1' && 并口打印机所接的并口名称
或
lcPortName='COM1' && 串口打印机所接的串口名称
lnPortHandle=Fopen(lcPortName,2)
If lnPortHandle<0
	Messagebox('无法打开打印机!',64,'信息')
	Return
Endi
Wait "正在打印, 请稍等...." Window Nowait
=Fputs(lnPortHandle,Chr(27)+Chr(64)) &&初始化

*以下重复的代码是倒走纸的,因为撕纸后,会留较长一段,倒走纸可以节约用纸
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
*-------------------------------------------

=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(1)) &&粗体
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(12)) &&
=Fputs(lnPortHandle," 欢迎光临佳人苑!")
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(0))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,' 时尚佳人苑 美丽人世间')
=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(0))
=Fputs(lnPortHandle,'客户:'+XXX+' 日期:'+Ttoc(Datetime()))
=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,' 货号 品名 数量 单价 金额')
=Fputs(lnPortHandle,'--------------------------------------') &&每行38字符

Select pdata
Scan For !Deleted()
	=Fputs(lnPortHandle,hh+Left(pm,10)+Str(cksl,4)+Str(lsj,8,2)+Str(ckje,8,2))
Endscan

=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,'营业员:YYY+' 实结金额:NNN')
=Fputs(lnPortHandle,'备注1')
=Fputs(lnPortHandle,'备注2')

=Fputs(lnPortHandle,Chr(27)+Chr(100)+Chr(6)) &&出纸

=Fclose(lnPortHandle)
Wait Clear
*Thisform.command2.SetFocus
使用示例解决了车票打印问题.但还是有一些地方不明白. 比如示例中关于退纸的那部分运行后打印机无任何反映,而且打印键进/退纸钮失效.我想可能是ESC指令不正确吧. 想请教十豆三老师: FF [名称] 打印并走纸到下页首 [格式] ASCII码 FF 这个指令该怎样书写,是chr(27)+chr(70)+chr(70)吗?
十豆三 2013-10-11
  • 打赏
  • 举报
回复
已更新 11 楼回复。
十豆三 2013-10-11
  • 打赏
  • 举报
回复
还有更简单的方法: Copy File c:\dayin.sdf to \\127.0.0.1\epsonme1
十豆三 2013-10-11
  • 打赏
  • 举报
回复
因为是内部命令,要改为这样:
ox.Run("cmd /c Copy c:\dayin.sdf \\127.0.0.1\epsonme1",0,0)
jack_wang0823 2013-10-10
  • 打赏
  • 举报
回复
首先你需要搞清楚你的纸张是多少吋的, 因为针机是行式打印, 每一行宽度为0.18吋 看看你的纸张能打多少行 多少列, 300k的话标准英文字体为80列,(8.5吋纸张) 按此标准布局. 逐行输出 .
jack_wang0823 2013-10-10
  • 打赏
  • 举报
回复
引用 11 楼 apple_8180 的回复:
不用报表,将你要打印内容保存(Strtofile())到一个文本文件中,至于排版你多次试验即可。 然后打印时: 如果打印机是本地并口打印机 Copy 文本文件名.TXT PRN 如果打印机是本地非并口打印机(要做共享)或网络打印机 Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名 以上 Copy 为 DOS 命令,在VFP中调用需要这样: Declare Long WinExec In kernel32 String,Long =WinExec("Copy 文本文件名.TXT PRN",0) *=WinExec("Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名",0) Clear Dlls 或 ox=Createobject("wscript.shell") ox.Run("Copy 文本文件名.TXT PRN",0,0) *ox.Run("Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名",0,0) Release ox 注:此种方式不用安装打印机驱动,但有一个缺点就是不能设置字体。
正解
十豆三 2013-10-10
  • 打赏
  • 举报
回复
帖一下清风曾经的例子:
小票打印机不需要驱动,直接用控制代码(以下是使用商场超市的针打,基本上都一样的。你买打印机时会告诉你控制代码的)
by:dfwxj
*lcPortName=Allt(sysinfo.pport)
lcPortName='LPT1' && 并口打印机所接的并口名称
或
lcPortName='COM1' && 串口打印机所接的串口名称
lnPortHandle=Fopen(lcPortName,2)
If lnPortHandle<0
	Messagebox('无法打开打印机!',64,'信息')
	Return
Endi
Wait "正在打印, 请稍等...." Window Nowait
=Fputs(lnPortHandle,Chr(27)+Chr(64)) &&初始化

*以下重复的代码是倒走纸的,因为撕纸后,会留较长一段,倒走纸可以节约用纸
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,Chr(27)+Chr(75)+Chr(48))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
*-------------------------------------------

=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(1)) &&粗体
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(12)) &&
=Fputs(lnPortHandle," 欢迎光临佳人苑!")
=Fputs(lnPortHandle,Chr(28)+Chr(33)+Chr(0))
=Fputs(lnPortHandle,Chr(27)+Chr(101)+Chr(2))
=Fputs(lnPortHandle,' 时尚佳人苑 美丽人世间')
=Fputs(lnPortHandle,Chr(27)+Chr(69)+Chr(0))
=Fputs(lnPortHandle,'客户:'+XXX+' 日期:'+Ttoc(Datetime()))
=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,' 货号 品名 数量 单价 金额')
=Fputs(lnPortHandle,'--------------------------------------') &&每行38字符

Select pdata
Scan For !Deleted()
	=Fputs(lnPortHandle,hh+Left(pm,10)+Str(cksl,4)+Str(lsj,8,2)+Str(ckje,8,2))
Endscan

=Fputs(lnPortHandle,'======================================') &&每行38字符
=Fputs(lnPortHandle,'营业员:YYY+' 实结金额:NNN')
=Fputs(lnPortHandle,'备注1')
=Fputs(lnPortHandle,'备注2')

=Fputs(lnPortHandle,Chr(27)+Chr(100)+Chr(6)) &&出纸

=Fclose(lnPortHandle)
Wait Clear
*Thisform.command2.SetFocus
十豆三 2013-10-10
  • 打赏
  • 举报
回复
上面是一种方法,如果要用ESC/POS命令集,请参考: 标准EPSON POS打印机的ESC/POS命令集 *--------------------------------- ESC/POS命令集 切纸指令: 发送:十六进制:1B69 4.1 基本控制指令 4.1.1 ESC @ [名称] 初始化打印机 [格式] ASCII码 ESC @ 十六进制码 1B 40 十进制码 27 64 [描述] 清除打印缓冲区中的数据,复位打印机打印参数到当打印机缺省参数。 [注意] * 不是完全恢复到出厂设置,用户参数设置(见三、JPM112打印机工具软件)不会被更改。 4.1.2 FF [名称] 打印并走纸到下页首 [格式] ASCII码 FF 十六进制码 0C 十进制码 12 [描述] 将打印缓冲区中的数据全部打印出来并返回标准模式。 [注意] * 打印后,删除打印缓冲区中的数据。 * 该命令设置打印位置为行的起始点。 * 如果打印纸有预印刷黑标,则打印缓冲区中的数据后,走纸到黑标处,如果打印纸无黑标,则 走纸0.5m后停止,预印刷黑标的规范请见附录B.预印刷黑标说明。 4.1.3 LF [名称] 打印并换行 [格式] ASCII码 LF 十六进制码 0A 十进制码 10 [描述] 把打印缓冲区中的数据打印出来,并换行。 [注意] * 该命令把打印位置设置为行的开始位置。 4.1.4 CR [名称] 打印并回车 [格式] ASCII码 CR 十六进制码 0D 十进制码 13 [描述] 打印但不进纸。 [注意] * 打印结束后,将下一行的开始设定为打印起始位置。 4.1.5 ESC J n [名称] 打印并进纸 [格式] ASCII码 ESC J n 十六进制码 1B 4A n 十进制码 27 74 n [范围] 0 ≤ n ≤ 255 [描述] 打印输出打印缓冲区中的数据,并进纸n个 垂直点距。 [注意] * 打印结束后,将下一行的开始设定为打印起始位置。 * 一个垂直点距为0.33mm,以下同。 4.1.6 ESC d n [名称] 打印并进纸n 行 [格式] ASCII码 ESC d n 十六进制码 1B 64 n 十进制码 27 100 n [范围] 0 ≤ n ≤ 255 [描述] 打印打印缓冲区中的数据并进纸n字符行。 [注意] * 该命令设置打印起始位置为行起点。 4.1.7 HT [名称] 移动打印位置到下一个水平制表位置 [格式] ASCII码 HT 十六进制码 09 十进制码 9 [描述] 移动打印位置到下一个水平制表位置。 [注意] * 通过ESC D命令设置水平制表位的位置。 * 如果没有设置下一个水平制表位置,则该命令被忽略。 * 水平定位位置的缺省设定为字符A(6×12)的8个字符宽度(第9,17,25, … 列)。 4.1.8 FS U nL nH [名称] 按Unicode编码向打印发送数据 [格式] ASCII码 FS U nL nH 十六进制码 1C 55 nL nH 十进制码 28 85 nL nH [描述] 打印n(n=nL+nH*256)个Unicode编码字符。 [注意] * 因Unicode是双字节编码,此命令后的2*n(n=nL+nH*256)个字节被当作Unicode编码字符处理; * 该指令中输入的汉字只支持GBK字库中包含的汉字,没有包含Unicode中所包含的所有汉字; * 有关GBK的详细信息请参阅全国信息技术标准化技术委员会制定的 “汉字内码扩展规范”; * 有关Unicode的详细信息可以参见Unicode的官方网站http://www.unicode.org; * 本命令不受汉字命令的影响,也不受自定义字符命令的影响; * 本命令可以嵌入其他ESC/GS/FS指令,但要采用Unicode编码。 4.2 字符参数设置命令 4.2.1 ESC ! n [命令] 选择打印模式 [格式] ASCII码 ESC ! n 十六进制码 1B 21 n 十进制码 27 33 n [范围] 0 ≤ n ≤ 255 [描述] 通过指定参数n 的值选择打印模式。参数n 的定义如下: 位 值 意义 0 0 西文字符 (半宽)字体A (6 ×12),汉字字符 (全宽)字体A (12×12) 1 西文字符 (半宽)字体B (8×16),汉字字符 (全宽)字体B (16×16) 1 - 未定义 2 - 未定义 3 0 取消粗体模式 1 设置粗体模式 4 0 取消倍高模式 1 设置倍高模式 5 0 取消倍宽模式 1 设置倍宽模式 6 - 未定义 7 0 取消下划线模式 1 设置下划线模式 [注意] * 当同时选择倍高及倍宽模式时,则打印出四倍大小字符。 * 打印机可以为所有字符加下划线,但不能为由HT命令产生的空白或顺时针旋转90°的字符加下划 线。 * 当一行中有一些倍高或更高字符时,行中所有字符都沿基线对齐。 * ESC M也可设定字体。最后接收到的命令的设定有效。 * ESC E也可设定或取消粗体模式。最后接收到的命令的设定有效。 * ESC –也可设定或取消下划线模式,最后接收到的命令的设定有效。 * GS !也可设定字符大小。最后接收到的命令的设定有效。 * 本命令对英数字符和汉字都有效。 [缺省值] n = 0 4.2.2 GS ! n [名称] 放大字符 [格式] ASCII码 GS ! n 十六进制码 1D 21 n 十进制码 29 33 n [范围] 0 ≤ n ≤ 255 (1 ≤垂直倍数≤ 2, 1 ≤ 水平倍数≤ 2) [描述] 用位0~3位选择字符高度,用位4~7位选择字符宽度,如下所示: 0 1 2 3 高度 4 5 6 7 宽度 0 0 0 0 1倍 0 0 0 0 1倍 1 0 0 0 2倍 1 0 0 0 2倍 [注意] * 该命令对所有字符(英数字符和汉字) 有效。 * 如果n 在定义范围之外,忽略该命令。 * 垂直方向是指进纸方向,水平方向与进纸方向垂直。然而,当字符方向顺时针旋转90°后,垂直 方向与水平方向之间的关系颠倒,也就是说本命令优先级低于于ESC V,当两个命令同时有效时, 字符显示是先旋转,再放大。 * 当字符以不同的尺寸在一行中放大时,一行中所有的字符沿基线对齐。 * 用ESC ! 命令也可以设置字符大小。以最后接收到的命令设置当前模式。 [缺省值] n = 0 4.2.3 ESC M n [名称] 选择字符字体 [格式] ASCII码 ESC M n 十六进制码 1B 4D n 十进制码 27 77 n [范围] n = 0, 1, 16, 17,18,19 [描述] 选择字符字体。 N(十进制) 意义 0 西文字符 (半宽)字体(6×12) 1 西文字符 (半宽)字体(8×16) 16 简体汉字字符字体12×12 17 简体汉字字符字体16×16 18 BIG5汉字字符字体12×12 19 BIG5汉字字符字体16×16 [注意] * ESC !也可设定字体。最后接收到的命令的设定有效。 * 当使用该命令设定字体时。可以分别设定西文字体和汉字字体,而且互不影响。 4.2.4 ESC – n [名称] 设置/取消下划线 [格式] ASCII码 ESC – n 十六进制码 1B 2D n 十进制码 27 45 n [范围] 0 ≤ n ≤ 2 [描述] 基于以下的n值,设定 /解除下划线模式: n(十进制) 意义 0 解除下划线模式 1 设定下划线模式(1 点粗) 2 设定下划线模式(2 点粗) [注意] * 打印机不能给旋转字符以及反白字符打印下划线。 * 改变字符大小不影响当前下划线的粗细。 * 使用ESC !也可以设定或解除下划线模式。最后接收的命令设定有效。 * 该命令对英文和汉字字符都有效。 [缺省值] n = 0 4.2.5 ESC E n [名称] 设定/解除粗体打印 [格式] ASCII码 ESC E n 十六进制码 1B 45 n 十进制码 27 69 n [范围] 0 ≤ n ≤ 255 [描述] 设定或解除粗体打印模式。 当n 的最低位(LSB)为0时,解除粗体打印模式。 当n 的最低位(LSB)为1时,设定粗体打印模式。 [注意] * 仅n 的最低有效位允许使用。 * 使用ESC !也可以设置或取消粗体模式。最后接收的命令设定有效。 [缺省值] n = 0 4.2.6 ESC G n [名称] 设定/解除重叠打印 [格式] ASCII码 ESC G n 十六进制码 1B 47 n 十进制码 27 71 n [范围] 0 ≤ n ≤ 255 [描述] 设定或解除重叠打印模式。 当n 的最低有效位(LSB)为0时,解除重叠打印模式。 当n 的最低有效位(LSB)为1时,设定重叠打印模式。 [注意] * 仅n 的最低有效位允许使用。 * 在重叠模式和粗体模式中打印机输出是相同的。 [缺省值] n = 0 4.2.7 GS B n [名称] 设定/解除反白打印模式 [格式] ASCII码 GS B n 十六进制码 1D 42 n 十进制码 29 66 n [范围] 0 ≤ n ≤ 255 [描述] 设定或解除反白打印模式。 当n 的最低有效位为0时,关闭反白模式。 当n 的最低有效位为1时,打开反白模式。 [注意] * 仅n 的最低位有效。 * 该命令对内置字符和用户自定义字符均有效。 * 反白模式打开时,它对ESC SP设定的空白也有效。 * 该命令不影响位图,用户自定义位图,条形码,条码显示字符和由HT, ESC $, 及ESC \ 跳过的 间距。 * 反白模式优先于下划线模式。选择反白模式时,即使下划线模式打开也被禁止(但不取消)。 [缺省值] n = 0 4.2.8 ESC V n OK [名称] 设置/解除字符旋转模式 [格式] ASCII码 ESC V n 十六进制码 1B 56 n 十进制码 27 86 n [范围] 0 ≤ n ≤ 3 [描述] 设置/解除字符旋转模式 N (十进制) 意义 0 解除旋转模式 1 设置90°顺时针旋转模式 2 设置180°顺时针旋转模式 3 设置270°顺时针旋转模式 [注意] * 当设置了下划线模式时,对于顺时针90°旋转的字符,打印机不加下划线。 * 在 旋转模式下,倍宽和倍高命令放大字符的方向与一般模式下倍高倍宽命令放大字符的方向相 反。 [缺省值] n = 0 4.3 打印排版参数设置命令 4.3.1 ESC $ nL nH [名称] 设置绝对打印位置 [格式] ASCII码 ESC $ nL nH 十六进制码 1B 24 nL nH 十进制码 27 36 nL nH [范围] 0 ≤ nL ≤ 255 0 ≤ nH ≤ 255 [描述] 设定从一行的开始到将要打印字符的位置之间的距离。 从一行的开始到打印位置的距离为N个水平点距。 nL nH是双字节无符号整数N的低位和高位,N=nL + nH × 256 [注意] * 如果设定的打印位置超出了可打印区域(N>244),则被设置为可打印区域的最大值 (N=244)。 4.3.2 ESC D n1 n2…nk NULL [名称] 设置水平制表位 [格式] ASCII码 ESC D n1…nk NULL 十六进制码 1B 44 n1…nk 00 十进制码 27 68 n1…nk 0 [范围] 1 ≤ n ≤ 255 0 ≤ k ≤ 8 [描述] 设置水平定位位置。 n 指定从一行开始的列号,用来设置水平定位位置。 k 表示将被设置水平定位点的总数。 [注意] * 水平制表位置作为一个值储存,这个值为n个西文字符宽度,是从行的开始测量的。字符宽度包
十豆三 2013-10-10
  • 打赏
  • 举报
回复
不用报表,将你要打印内容保存(Strtofile())到一个文本文件中,至于排版你多次试验即可。

然后打印时:

如果打印机是本地并口打印机
Copy 文本文件名.txt PRN

如果打印机是:
1、本地并口打印机(要做共享)
2、本地USB口打印机(要做共享)
3、网络打印机(并口或USB口均可,要做共享)
Copy 文本文件名.txt \\打印机所在计算机名称或IP\打印机共享名

以上 Copy 为 DOS 命令,在VFP中调用需要这样:

Copy File 文本文件名.txt To \\打印机所在计算机名称或IP\打印机共享名
如:
Copy File a.txt To \\127.0.0.1\打印机共享名
Copy File a.txt To \\192.168.0.200\打印机共享名



Declare Long WinExec In kernel32 String,Long
=WinExec("cmd /c Copy 文本文件名.txt PRN",0) && 打印机是本地并口打印机
*=WinExec("cmd /c Copy 文本文件名.txt \\打印机所在计算机名称或IP\打印机共享名",0)
Clear Dlls



ox=Createobject("wscript.shell")
ox.Run("cmd /c Copy 文本文件名.txt PRN",0,0) && 打印机是本地并口打印机
*ox.Run("cmd /c Copy 文本文件名.txt \\打印机所在计算机名称或IP\打印机共享名",0,0)

注:此种方式不用安装打印机驱动,但有一个缺点就是不能设置字体。
wwwwb 2013-10-10
  • 打赏
  • 举报
回复
这个要参考LQ300KII打印机的使用手册,看看具体的控制码什么
jack_wang0823 2013-10-10
  • 打赏
  • 举报
回复
引用 11 楼 apple_8180 的回复:
不用报表,将你要打印内容保存(Strtofile())到一个文本文件中,至于排版你多次试验即可。

然后打印时:

如果打印机是本地并口打印机
Copy 文本文件名.TXT PRN

如果打印机是本地非并口打印机(要做共享)或网络打印机
Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名

以上 Copy 为 DOS 命令,在VFP中调用需要这样:

Declare Long WinExec In kernel32 String,Long
=WinExec("Copy 文本文件名.TXT PRN",0)
*=WinExec("Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名",0)
Clear Dlls



ox=Createobject("wscript.shell")
ox.Run("Copy 文本文件名.TXT PRN",0,0)
*ox.Run("Copy 文本文件名.Txt \\打印机所在计算机名称或IP\打印机共享名",0,0)
Release ox

注:此种方式不用安装打印机驱动,但有一个缺点就是不能设置字体。



不知道哪里出错
都市夜猫 2013-10-10
  • 打赏
  • 举报
回复
myfll 的函数 PrintStringDirect 可以直接输出到打印机 用法: PrintStringDirect(cString, cPrintName, cPort)
lgtth 2013-10-09
  • 打赏
  • 举报
回复
我是直接将你的代码复制后执行的.没有做改动.
lgtth 2013-10-09
  • 打赏
  • 举报
回复
引用 7 楼 WWWWA 的回复:
SET DEVICE TO PRINTER @ prow()+1 , 0 say chr(27)+"EM" 退纸的控制码
执行后打印机没有反映,在打印队列了多一条打印任务
WWWWA 2013-10-09
  • 打赏
  • 举报
回复
SET DEVICE TO PRINTER @ prow()+1 , 0 say chr(27)+"EM" 退纸的控制码
lgtth 2013-10-09
  • 打赏
  • 举报
回复
谢谢你们的回复!因为车票高度太小,无法自定义纸张,所以才想到用ESC直接打印,我现在有ESC码http://www.epson.com.cn/store/onlineManual/299/2635/REF_G/ref_g/apcom_3.htm,但我不知如何在VFP中使用,比如我想让打印机回退,这个命令该如何写呢?还有,我发送CHR(27)后VFp提示一条'Error accessing printer spooler.'.麻烦两位大大帮我看看,现在就差打印功能了.我的QQ1102527468
加载更多回复(3)

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧