如何控制针式打印机走纸

我做的一个打印票据的程序,用的链式进纸,每次打完数据后,打印机并不是立刻停止的,还继续会走一段,打印机设置的A4纸,那怕打几行,也是走完A4的纸再停。
我想实现,打完数据,立刻停止,请问如何实现,就类似于超市POS机那样,有多少数据打多少数据。
打印机是ESPON 590K 或LQ-1600k3也可以。
完美解决问题的,愿意奉献所有的积分,开贴送分。
VB或DELPHI都可以。
这些都是什么意思?怎么利用控制码打印表格和文字?
EPSON ESC/P控制码
只要在软件中选择EPSON ESC/P打印机,就可以使用高级字体和图形。
一般操作:
ESC @, ESC U, ESC EM
进纸:
FF, LF, ESC 0, ESC 2, ESC 3, ESC +, CR

页面格式:
ESC (C, ESC C, ESC C 0, ESC Q, ESC l, ESC (c, ESC N, ESC O

打印位置移动:

ESC $, ESC \, ESC (V, ESC (v, ESC D, HT, ESC B, VT, ESC J

字体选择:
ESC k, ESC x, ESC y, ESC X, ESC P, ESC M, ESC g, ESC p, ESC 4, ESC 5, ESC E, ESC F, ESC !

字体增强:
ESC W, DC4, SO, DC2, SI, ESC w, ESC G, ESC H, ESC T, ESC S, ESC -, ESC (-, ESC q

间距:
ESC Space, ESC c, ESC (U
字符处理:
ESC t, ESC ( t, ESC R, ESC %, ESC &, ESC :, ESC 6, ESC 7, ESC (^

位图:

ESC *
条形码:

ESC (B
产品:

ESC |

1、把EPSON LQ-300K+II的驱动程序换成EPSON LQ-1600K。(EPSON LQ-300K+II的驱动是不支持走纸控制的,一定要换成EPSON LQ-1600K,EPSON LQ-1600K的驱动是XP自带的,只要在打印机安装里搜索一下就有它的驱动安装程序)。
2、打印机在单页纸设置时是不支持进走纸控制的。所以,必须使用连续纸进纸!且把打印机右边的“过纸控制杆”推在连续走纸的位置!
3、如果使用代码控制走纸请跳过本条直接看第4条。如果使用word 等软件打印的话,请继续看完本条。
开始——》设置——》打印机和传真——》窗口空白处右键单击——》服务器属性—》创建新格式——》纸张大小处请精确填写所须打印的纸张长宽——》确定——》确定
打印时,在所用软件的页面设置里对纸张进行设置。注意,不是打印设置
中的纸张设置!!是文件——》页面设置!!
因为该打印机是软件设置优先。对打印中的设置是驱动设置,会被页面设置中的软件设置覆盖掉!
4、如果使用代码控制,请参考下面代码:(VC++)
BOOL PrintChitty()//打印函数
{ HDC PrintDC;
DOCINFO docin;
docin.cbSize = sizeof(DOCINFO);
docin.lpszDocName = "TestDoc";
docin.lpszOutput = NULL;
CPrintDialog PrintDialog(TRUE,PD_ALLPAGES|PD_NOPAGENUMS,NULL);
// if(!PrintDialog.GetDefaults()) return FALSE; //如果不用打印设置对话框,使这一行有效
PRINTDLG *pPrintDlg = &PrintDialog.m_pd;
AfxGetApp()->GetPrinterDeviceDefaults(pPrintDlg);
DEVMODE* lpDevMode = (DEVMODE*)::GlobalLock(pPrintDlg->hDevMode);
::GlobalUnlock(pPrintDlg->hDevMode);
lpDevMode->dmFields |= -1;//设定为自定义纸张尺寸, 如果用其他预定义的纸张尺寸,把这一行去掉,用下一行
//lpDevMode->dmPaperSize = DMPAPER_A5; //设定为 A5 纸
lpDevMode->dmPaperLength = 300;//设定纸长为3 厘米
lpDevMode->dmPaperWidth = 300;//设定纸宽为5 厘米
if(PrintDialog.DoModal()!=IDOK) returnFALSE;//显示打印设置对话框(不显示把这一行去掉)
PrintDC = PrintDialog.CreatePrinterDC();// 返回一个打印DC句柄
StartDoc(PrintDC,&docin);// 启动打印工作
StartPage(PrintDC); // 一页开始
TextOut(PrintDC,10,10,"打印内容",8);//打印内容
EndPage(PrintDC); // 一页结束
EndDoc(PrintDC);// 终止打印工作
if(DeleteDC(PrintDC))returnTRUE;// 删除打印机DC
else{ ::MessageBox("出错"); returnFALSE; }}
5、点击确定!走纸范围被控制在设定的纸张范围内了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-22
汉字模式fs&,fs.

倍宽字符fs so,fs dc4

四位字符fs w

垂直间距fs j

水平线间距fs k

两个半倍宽字符fs d(垂直打印)

汉字下划线fs-

汉字间距fs s

半倍宽字符间距fs t

半倍宽字符间隔fs u,fs v(调整)

高速打印fs x

下载汉字fs 2

半倍宽字符fs si,fs dc2

1/4字符fs r

表格符连线fs v

汉字字体族fs k

汉字打印模式选择fs i

汉字字符宽度选择fs y

bank-number选择 fs(1

cc-dos控制码

打印模式 esc i a,esc i b,esc i c,esc i d

条形码

条形码安装及打印 esc (b

代码 功能 代码 功能
LF 换行 ESC m 局部切割
CR 回车 ESC o 印章
ESC SP 设置右边界 ESC q 释放纸
ESC ! 设置打印方式 ESC r 选择打印颜色
ESC * 设置位映射方式 ESC z 设置或取消两页并行打印
ESC @ 初始化打印机 ESC BEL 蜂鸣器ON/OFF
ESC R 选择国际字符子集 ESC c5 禁止/使能面板开关
ESC d 打印及N行进纸 ESC c6 禁止/使能ON-LINE开关
ESC t 选择字符码表 ESC p 产生指定脉冲
ESC l 选择或取消倒过来的字符ESC V 发送打印机状态
ESC c0 选择打印页 ESC ~ LED ON/OFF
FF 打印送出单页 HT 水平TAB
RS 流水TAB ESC % 选择或取消用户自定义字符集
ESC 2 选择行间距为1/6英寸 ESC & 定义用户自定义字符集
ESC 3 设置行进为最小间距 ESC D 设置TAB位置
ESC 标签:
ESC
,
Espon
,
Windows
,
打印指令

我知道的就这么多了...有问题在线联系本回答被提问者和网友采纳
第2个回答  2009-05-13
WIN98支持中文,WINXP不支持中文。
Option Explicit
Dim i As Integer
Private Sub Command1_Click()
Open "LPT1" For Output As #1
'Print #1, ChrW(27); "!"; "A引号"
Print #1, Chr(27); "IA"; "AAAAAAAAAAA引号里填写打印机脚本"
Print #1, Chr(13) '进纸
Print #1, Chr(27); "IB"; "引号里填写打印机脚本"
Print #1, Chr(13) '进纸
Print #1, Chr(27); "IC"; "引号里填写打印机脚本"
Print #1, Chr(13) '进纸
Print #1, Chr(27); "ID"; "引号里填写打印机脚本"
Print #1, Chr(13) '进纸
Close #1
End Sub

Private Sub Command2_Click()
Open "LPT1" For Output As #1
For i = 1 To 5
'Print #1, Chr(12) '控制换页
Print #1, Chr(10) '控制换行,同Chr(13)
Next
Print #1, Chr(27); "IA"; "abcdefghijkl" '正常字体每行80字符"
Print #1, Chr(27); "IA"; "ABCDEFGHIJKL" '正常字体每行80字符"
Print #1, Chr(27); "IB"; "ABCDEFGHIJKL" '宽体每行40字符
Print #1, Chr(14); "abcdefghijkl" '宽体每行40字符
Print #1, Chr(15); "abcdefghijkl" '宽体每行40字符
Print #1, Chr(18); "abcdefghijkl"
Print #1, Chr(27); "E"; "ABCDEFGHIJKL" '加重黑体
Print #1, Chr(27); "F" '取消加重黑体
Print #1, Chr(27); "4"; "ABCDEFGHIJKL" '斜体
Print #1, Chr(27); "5" '取消斜体
Print #1, Chr(27); "0"; "ABCDEFGHIJKL" '打印每吋6行改8行
Print #1, Chr(27); "1"; "ABCDEFGHIJKL" '重置行间隔为7/72
Print #1, Chr(27); "2"; "ABCDEFGHIJKL" '重置行间隔为1/6
Close #1
End Sub

Private Sub Command3_Click()
Open "LPT1:" For Binary Access Write As #1
DoEvents
Put #1, , "AAAAAAAAAAAA引号里填写打印机脚本"
Close #1
Open "LPT1" For Output As #1
Print #1, 'Chr(13) '进纸
Close #1
End Sub
第3个回答  2009-05-12
我觉得你用什么纸和设什么纸都无所谓,关键是你的打印程序在打印时不要换页,也不要有换页代码。
第4个回答  2009-05-14
最简单的就是,在电脑里打印机驱动里设置自己用的纸型。
相似回答