-
2014年02月18日 14:17:48 ribut9225 阅读数 4020
在使用连续纸打印数据窗口的情况下,需要定制打印的页长,以保证打印机走纸正确,不用人工干预,实现连续打印。在PB中须调用外部函数来自定义纸张长度,比较繁琐。本文介绍一种直接对打印机的控制方法,简单实现对页长的设定。
---- 一、 预备知识
---- 计算机与打印机的通讯使用ASCII码进行,其中标准ASCII码包括可打印字符及非打印字符(控制码),打印机使用控制码来定制打印机。大多数打印机指令使用控制码escape作为其指令序列的第一个序列码。下面介绍本文用到的几个指令码序列:
设置换行量(行距)1/8 英寸
ASCII码 ESC 0
十进制码 27 48
设置以行为单位的页长
ASCII码 ESC C n
十进制码 27 67 n
其中n 为每页行数范围(1-127)
---- 二、 PB中控制码的传送及定制页长的实现
---- 在PB中通过函数Printsend(printjobnumber,string,{zerochar})来实现向打印机发送控制码。各参数定义如下:
printjobnumber: 由printjob()函数返回的打印作业号;
string: 控制字符串,使用ASCII码;
zerochar: 用来替代string中的数字0;
---- 由于字符串中,0终止字符串,如果string 中包含0,则需利用其他字符来表示0,参数zerochar即为此用途而设,当PB发送控制字符串给打印机时,把替代的字符zerochar转化为0。
---- 下面是具体的完成定制页长打印数据窗口的程序(定制页长为2.75英寸):
long ll_job
dw_print.reset()
ll_job = printopen()
if ll_job = -1 then
messagebox(gs_title,"打印机未准备好")
return
end if
//定制行距1/8英寸
PrintSend(ll_job, CHAR(27)+CHAR(48))
//设定页长22行
PrintSend(ll_job, CHAR(27)+CHAR(67)+CHAR(22))
printdatawindow(ll_job,dw_print)
printclose(ll_job)
通过ESC指令集来控制。
具体方法: ESC_D_M(M为数值)
long ll_job
dw_print.reset()
ll_job = printopen()
if ll_job = -1 then
messagebox(gs_title,"打印机未准备好")
return
end if
//定制行距1/8英寸
PrintSend(ll_job, CHAR(27)+CHAR(48))
//设定页长22行
PrintSend(ll_job,CHAR(27)+CHAR(67)+CHAR(dw_print.rowcount()))
printdatawindow(ll_job,dw_print)
printclose(ll_job)
可控制打印走纸的长度,如你打印时用dw_print.print()你windows中默认打印机的纸张是A4
这样打印时如果dw中有一行也是把A4这张纸走完,如果你用上面的这可以控制如dw中有10行这样走到第10行时,打印作业就停止了!,你可以把上面的程序写到你的程序中就应该可以解决,不过此程序只适用于针式打印机
如有问题可以发邮件pjj-33@163.com
-
//连续打印
-
job = PrintOpen()
-
PrintSend(job,CharA(27) + CharA(67) + CharA(1)) //以行为单位设定页长
-
PrintSend(job,CharA(27) + CharA(85) + CharA(48)) //解除粗体字体
-
PrintSend(job,CharA(28) + CharA(120) + CharA(1)) //选择英文字体打印品质
-
PrintDataWindow(job,dw)
-
PrintClose(job)
- --*********************************************************************************
-
--------------------打印机退纸----------------------------------------------------
打印时能使纸回退,打印完之后能能让纸前进一些,适合于打票据的单位(注意使用printdatawindow函数,Datawindow中字体设置均无效)
long job,temp
job=printopen()
printsend(job,"~h1B~h6A~254")
printsend(job,"~h1B~h6A~100")
printsend(job,"~h1c~h78~h01")
printsend(job,"~h1B~h43~h01")
print(job,"")
temp=printdatawindow(job,dw_print) /*dw_print是要打印的数据窗口*/
printclose(job)
Job = PrintOpen()
printsend(job,"~h1B~h43~h13")
printclose(job)
--------------------------------------------------------------------------
API之打印函数
AbortDoc 取消一份文档的打印AbortPrinter 删除与一台打印机关联在一起的缓冲文件
AddForm 为打印机的表单列表添加一个新表单
AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号
AddMonitor 为系统添加一个打印机监视器
AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口
AddPrinter 在系统中添加一台新打印机
AddPrinterConnection 连接指定的打印机
AddPrinterDriver 为指定的系统添加一个打印驱动程序
AddPrintProcessor 为指定的系统添加一个打印处理器
AddPrintProvidor 为系统添加一个打印供应商
AdvancedDocumentProperties 启动打印机文档设置对话框
ClosePrinter 关闭一个打开的打印机对象
ConfigurePort 针对指定的端口,启动一个端口配置对话框
ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接
DeleteForm 从打印机可用表单列表中删除一个表单
DeleteMonitor 删除指定的打印监视器
DeletePort 启动"删除端口"对话框,允许用户从当前系统删除一个端口
DeletePrinter 将指定的打印机标志为从系统中删除
DeletePrinterConnection 删除与指定打印机的连接
DeletePrinterDriver 从系统删除一个打印机驱动程序
DeletePrintProcessor 从指定系统删除一个打印处理器
DeletePrintProvidor 从系统中删除一个打印供应商
DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息
DocumentProperties 打印机配置控制函数
EndDocAPI 结束一个成功的打印作业
EndDocPrinter 在后台打印程序的级别指定一个文档的结束
EndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页
EndPagePrinter 指定一个页在打印作业中的结尾
EnumForms 枚举一台打印机可用的表单
EnumJobs 枚举打印队列中的作业
EnumMonitors 枚举可用的打印监视器
EnumPorts 枚举一个系统可用的端口
EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序
EnumPrinters 枚举系统中安装的打印机
EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型
EnumPrintProcessors 枚举系统中可用的打印处理器
Escape 设备控制函数
FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化
FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因
FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区
GetForm 取得与指定表单有关的信息
GetJob 获取与指定作业有关的信息
GetPrinter 取得与指定打印机有关的信息
GetPrinterData 为打印机设置注册表配置信息
GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息
GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么
GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录
OpenPrinter 打开指定的打印机,并获取打印机的句柄
PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框
PrinterProperties 启动打印机属性对话框,以便对打印机进行配置
ReadPrinter 从打印机读入数据
ResetDC 重设一个设备场景
ResetPrinter 改变指定打印机的默认数据类型及文档设置
ScheduleJob 提交一个要打印的作业
SetAbortProc 为Windows指定取消函数的地址
SetForm 为指定的表单设置信息
SetJob 对一个打印作业的状态进行控制
SetPrinter 对一台打印机的状态进行控制
SetPrinterData 设置打印机的注册表配置信息
StartDoc 开始一个打印作业
StartDocPrinter 在后台打印的级别启动一个新文档
StartPage 打印一个新页前要先调用这个函数
StartPagePrinter 在打印作业中指定一个新页的开始
WritePrinter 将发送目录中的数据写入打印机
--------------------------------
PB中控制码的传送及定制页长的实现
---- 在PB中通过函数Printsend(printjobnumber,string,{zerochar})来实现向打印机发送控制码。各参数定义如下:
printjobnumber: 由printjob()函数返回的打印作业号; string: 控制字符串,使用ASCII码; zerochar: 用来替代string中的数字0;
---- 由于字符串中,0终止字符串,如果string 中包含0,则需利用其他字符来表示0,参数zerochar即为此用途而设,当PB发送控制字符串给打印机时,把替代的字符zerochar转化为0。
---- 下面是具体的完成定制页长打印数据窗口的程序(定制页长为2.75英寸):
long ll_job dw_print.reset() ll_job = printopen() if ll_job = -1 then messagebox(gs_title,"打印机未准备好") return end if //定制行距1/8英寸 PrintSend(ll_job, CHAR(27)+CHAR(48)) //设定页长22行 PrintSend(ll_job, CHAR(27)+CHAR(67)+CHAR(22)) printdatawindow(ll_job,dw_print) printclose(ll_job)
(转)pb控制打印机
最新推荐文章于 2023-06-20 00:22:44 发布