如何控制针式打印机走纸
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何控制针式打印机走纸相关的知识,希望对你有一定的参考价值。
我做的一个打印票据的程序,用的链式进纸,每次打完数据后,打印机并不是立刻停止的,还继续会走一段,打印机设置的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 |
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、点击确定!走纸范围被控制在设定的纸张范围内了。 参考技术A 汉字模式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
,
打印指令
我知道的就这么多了...有问题在线联系本回答被提问者和网友采纳 参考技术B 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 参考技术C 我觉得你用什么纸和设什么纸都无所谓,关键是你的打印程序在打印时不要换页,也不要有换页代码。 参考技术D 最简单的就是,在电脑里打印机驱动里设置自己用的纸型。
ReportMachine打印条形码的问题
最近用RM报表来打印条形码,调试过程非常顺利,扫描枪识别也很正常,唯独斑马打印机的走纸不准确是个问题,正好客户不想用这种纸型,并定制了新纸型,心想等新纸型到后再调试报表的走纸问题不迟。
几天后,新纸型到,于是在新纸型下进行调试,却发现新纸型的走纸非常正确,一想便明白是传感器的问题,原来的纸型宽,不适用这种斑马打印机,现在好了,走纸问题没有了,可以交付程序了。一个同事说别扫描枪不识别,我心里不以为然,另外一个同事顺手把打出来的条码往扫描枪一靠,我靠,还真没识别出来,又连续打了好几张,都不能识别,这下晕了。换原来的宽纸打印,能识别了。但是客户订的是窄纸型且窄纸无走纸不准确问题,只能用窄纸打印,便琢磨着问题出在哪儿,打印驱动、扫描枪、电脑都换了一遍,还是不行。细心的客户比较了一下两种纸,发现窄纸质量不如宽纸好,但是这也不能解决问题。再仔细看看,总感觉RM打印的条码不是很锐利,感觉模模糊糊的,尤其是细线几乎就没打印出来,放大一看,原本应该是直线的,但是实际上是圆角直线,觉得这就是问题所在。那就换控件吧,从网上找了N多条码控件,并研究了几种条形码的绘制方法与验证码的生成,但是不能嵌入到RM中,就没法用。
已经夜里十二点了,突然想起RM的条形码也是抄别人的代码,如果找到该代码的升级版,也许可以解决问题,说找就找,经过一番搜索并对比,还真找到了原版代码,再仔细一看,靠,居然版本比RM用的还低,没招,还是研究一下RM的代码,看看能否找出问题所在,仔细看了RM的RM_AsBarCode单元,觉得没有什么问题,无意中发现了还有个RM_AsBarView单元,打开一看,原来RM是在这里通过调用RM_AsBarCode的DrawBarCode方法来绘制自己的画布的,估计应该是这里出问题了,经过研究,RM是采用了TMetafile类来进行绘制并放大的,这个类的好处是放大的失真度比较小,对于处理文字和图形应该是比较好的方案,但是处理条形码估计就不行了,于是换成TBitmap进行绘制,打印出来的条码放大后锯齿状明显,在正常情况下却是非常锐利的,心想这下问题应该解决了。连接打印机,一下打了十几张条形码,十几张条码扫描都非常顺利。