📄 打印定长页(函数).txt
字号:
打印定长页(函数)
经常看到有关于针式打印机过纸的问题,提供一个函数供各位网友参考:
/////////////////////////////////////////////////////////////////////
//定义: public Integer of_Print(DataStore ads_Data,
// Integer ai_PaperHeight)
//功能: 按固定页长打印
//参数:
// ads_Data: 打印数据存储
// ai_PaperHeight: 页长(单位为0.1毫米)
//返回值:
// 1: 操作成功
// -1: 操作失败
/////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------
if NOT IsValid(ads_Data) or ads_Data.RowCount() < 1 then return -1
//-------------------------------------------------------------------
//定制行距1/8英寸 1/8英寸=0.125英寸=1.875毫米
//1英寸=25.4毫米
//1/8英寸 * 行数 = 页长(英寸) * 25.4 = 页长(毫米)
//由页长(毫米)求行数公式为:
// 页长(毫米) / 25.4 * 8
Decimal{5} ldc_Height
Integer li_Lines
ldc_Height = Dec(ai_PaperHeight)
li_Lines = ldc_Height / 25.4 * 8 / 10
//-------------------------------------------------------------------
long ll_Job
ll_Job = PrintOpen()
if ll_Job = -1 then
MessageBox("系统提示","打印机未准备好")
return -1
end if
PrintSend(ll_Job, CHAR(27) + CHAR(48))//定制行距1/8英寸
PrintSend(ll_Job, CHAR(27) + CHAR(67) + CHAR(li_Lines))//设定页长li_Lines行
PrintDataWindow(ll_Job,ads_Data)
PrintClose(ll_Job)
//-------------------------------------------------------------------
return 1
//-------------------------------------------------------------------
PB中定制打印页长
在使用连续纸打印数据窗口的情况下,需要定制打印的页长,以保证打印机走纸正确,不用人工干预,实现连续打印。在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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -