社区
DataWindow
帖子详情
自定义打印纸长度的问题
nlock
2003-08-25 11:59:37
每次收款时明细表中的项目条数都不同,准备在打印到每次定义的纸张的长度时停止。
我用的打印机型号是“STAR AR-3200II”打印纸用的是连续纸。
请各位大虾指教!
...全文
428
10
打赏
收藏
自定义打印纸长度的问题
每次收款时明细表中的项目条数都不同,准备在打印到每次定义的纸张的长度时停止。 我用的打印机型号是“STAR AR-3200II”打印纸用的是连续纸。 请各位大虾指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bkqdd
2003-08-29
打赏
举报
回复
我也遇到同样的问题,你如果解决了,请与我联系daixianrong@163.net,谢谢!
我看到另外的思路,你可以参考,看能否解决这个问题
摘 要: 一种动态设置打印机参数的方法。在程序中运用此方法,用户在打印时只需在打印机中放入合适的纸张,而不用考虑打印机的设置。
关键词: 打印机 注册表 动态设置
1 问题的提出
在许多应用系统中,常常需要打印各式各样的票据和报表,它们经常是没有统一的格式,所需的打印纸也就大小不一,有的甚至有专用的格式。因此,如果我们不对打印机的设置进行有效的控制,就要求用户在运行这些系统时不断地更改打印机设置,以适应系统的需要。一般情况下,用户会觉得用这样的软件很麻烦,并且经常会出现错误。一种比较简单的解决办法就是对同一台物理打印机在WINDOWS中安装几台逻辑打印机,每台逻辑打印机对应一种票据或报表格式,在打印某一票据或报表时就选择与之对应的逻辑打印机。这种方法的缺点是每次打印时还要去选择1个逻辑打印机,增加了操作人员的操作步骤。基于此,本文给出了一种比较自动和通用的解决方法。运用此方法开发打印程序,打印时用户只需往打印机中加入适当的纸张即可打印出正确的报表。
2 动态设置打印机
在WINDOWS 95环境下,与计算机设置有关的信息全部记录在注册表(REGISTRY)中。WINDOWS 95在用到某一设备或程序时,它就到注册表中取出有关这一设备或程序的设置信息。当增加1台设备时,WINDOWS 95就会在注册表中增加相应的项目;当修改某一设备的设置时,WINDOWS 95也会对有关这一设备的注册项目进行修改。所以我们可以通过动态修改注册表中的有关打印机设置的信息来达到动态设置打印机的目的。
经研究发现,与打印机有关的主要设置有二项,其中第1项为当前默认打印机,其注册表入口为:HKEY_LOCAL_MACHINE\Config\0001\System\CurrentControlSet\Control\Print\Printers,设置值存放在default项中的字符串,即我们可以通过这一注册表的这一分支的default项得到WINDOWS的当前默认打印机。第2项为打印纸设置有关的项目,其注册表入口为:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\SETPRINTER,其中的SETPRINTER要替换为你所安装的打印机的名字,如Epson LQ-1600K等,这一分支有许多个项,最关键的项(也是与打印纸张设置有关的项)是Default DevMode,此项的设置值为1个二进制串,其中主要的几个参数的偏移地址和意义见表1。
表1 打印机参数表
设置项目 偏移量 字节数 说明
纸张设置 0x2F 2 打印机纸张类型,256为用户自定义纸张,小于256的数值为该打印机能打印的标准纸张的编号,随打印机类型改变。
纸张长度 0x31 2 当纸张设置为256(即用户自定义纸张)时才有用,意义为要设置的打印纸的长度(以0.1毫米为单位)。
纸张宽度 0x33 2 当纸张设置为256(即用户自定义纸张)时才有用,意义为要设置的打印纸的宽度(以0.1毫米为单位)。
打印方向 0x2D 2 0x01-纵向打印,0x02-横向打印。
进纸方式 0x39 2 0x04-手动送纸,0x08-传纸器。
下面我们给出这种动态设置方法在PowerBuilder(PB)中的实现方法。在PB中我们可以定义2个全局函数:gf_PrnSetting(),gf_PrnSettingBack()。具体应用时,可以用第1个函数将打印设置为我们需要的状态,并将打印机的原状态保存起来,再用第2个函数将打印机状态恢复。这2个函数的具体实现如下所示。
//函数功能:用自定义参数设置打印机
//输入参数:al_Lengn-打印纸长度,al_Width-打印纸宽度
// ai_PaperSource-进纸方式,ai_PrintDirection-
//打印方向输出参数:ablb_setvalue-打印机的原参数
//返回值:1-成功,0-不成功
Gf_PrnSetting(long al_Lengh,long al_Width,int ai_PaperSource,int ai_PrintDirection,blob ablb_setvalue)
constant string cls_valuename=″Default DevMode″
constant uint clu_pos_width=51
constant uint clu_pos_length=49
constant uint clu_pos_papersize=47
constant uint clu_pos_papersource=57
constant uint clu_pos_printdirection=45
constant uint clu_usersizepaper=256
blob lb_value,newvalue
string ls_key,ls_printer
int li_ret
li ret=RegistryGet(″HKEY_LOCAL_MACHINE\Config\0001\
System\CurrentControlSet″+&″\Control\Print\
Printers″,′default′,RegString!,ls_printer)
IF li_ret<>1 THEN
MESSAGEBOX(″系统提示″,″打印机未设置!″,Excla- mation!)
RETURN 0
END IF
ls_key=″HKEY_LOCAL_MACHINE\System\CurrentControlSet\
control\Print\Printers\″+ls_printer
RegistryGet(is_key,cls_valuename,RegBinary!,lb_value)
ablb_setvalue=lb_value
lb_newvalue=blobmid(lb_value,1,clu_pos_papersize-1)+
blobmid(lb_value,clu_pos_width+2)
blobedit(lb_newvalue,clu_pos_papersize,clu_usersizepaper)
blobedit(lb_newvalue,clu_pos_length,al_Length)
blobedit(lb_newvalue,clu_pos_width,al_Width)
lb_value=lb_newvalue
lb_newvalue=blobmid(lb_value,1,clu_pos_papersource-1)
+blobmid(lb_value,clu_pos_papersource+1)+
& blobmid(lb_value,1,clu_pos_printdirec-
tion-1)+blobmid(lb_value,clu_pos_printdi-
rection+1)
blobedit(lb_newvalue,clu_pos_papersource,ai_papersource)
blobedit(lb_newvalue,clu_pos_printdirection,ai_printdirection)
ls_key=″HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\Printers\″+ls_printer
li_ret=RegistrySet(ls_key,cls_valuename,RegBinary!,lb_newvalue)
IF ii_r<>1 THEN
MESSAGEBOX(″系统提示″,″打印机设置失败!″,Exclamation!)
RETURN 0
END IF
RETURN 1
//函数功能:恢复原打印机设置
//输入参数:ablb_setvalue-打印机原设置串
//输出参数:无
//返回值:1-成功,0-不成功
Gf_PrnSettingBack(blob ablb_setvalue)
int li_ret
string ls_printer,ls_key
constant string cls_valuename=″Default DevMode″
li_ret=RegistryGet(″HKEY_LOCAL_MACHINE\Config\0001\
System\CurrentControlSet″+&″\Control\Print-
ers″,′default′,RegString!,ls_printer)
IF li_ret<>1 THEN
MESSAGEBOX(″系统提示″,″打印机未设置!″, Exclamation!)
RETURN 0
END IF
ls_key=″HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\Print\Printers\″+ls_printer
li_ret=RegistrySet(ls_key,cls_valuename,RegBinary!,
lb_newvalue)
if li_ret<>1 then return 0
return 1
本文所提供的程序在1台内装WINDOWS 95操作系统的PentiumⅡ266计算机上用PowerBuilder 6.0和Epson LQ-1600K打印机调试通过,并在我们开发的MRP/ERP系统中得到应用,效果良好。对于其它开发工具及其它打印机型号,其实现方法和上面给出的相类似。
铁治欣(杭州浙江大学计算机科学与工程系310027)
陈奇(杭州浙江大学计算机科学与工程系310027)
俞瑞钊(杭州浙江大学计算机科学与工程系310027)
收稿日期:1999-07-21
首页 - 关于泡吧 - 加盟机会 - 广告服务 - 版权声明 - 您请留言
nlock
2003-08-26
打赏
举报
回复
我是想自定义纸张长度,并不是数据窗口
incats
2003-08-26
打赏
举报
回复
更正:
pagecount = dw_1.rowcount() / perpage
incats
2003-08-26
打赏
举报
回复
可以.
1. 增加一计算列(不显示), 让其=getrow()
2. 假设自定义的纸张要求每页打印10条记录或5条记录
perpage = 10
pagecount = dw_1.rowcount() / pagecount
if pagecount <> round(pagecount) then pagecount ++
for pageindex = 1 to pagecount
dw_1. SetFilter(某列 属于 [ (pageindex - 1) * perpage])
dw_1. Print()
next
qiyousyc
2003-08-26
打赏
举报
回复
用数据窗口可以实现自定义纸张,但你可能计算不出数据窗口的长度。
利用PrintText函数实现dos打印。
nlock
2003-08-26
打赏
举报
回复
没人能够解决吗?
nlock
2003-08-25
打赏
举报
回复
不行呀!
xisat
2003-08-25
打赏
举报
回复
http://www.pdriver.com/display.asp?key_id=1537
看看有用吗?
nlock
2003-08-25
打赏
举报
回复
说详细点好吗?
如果用数据窗口就不能实现自定义纸张吗?
qiyousyc
2003-08-25
打赏
举报
回复
收款的打印是不用数据窗口的,是直接利用行模式发送到打印机的(就是dos打印)。
打印纸
张尺寸换算_电脑
打印纸
规格全记录
原标题:电脑
打印纸
规格全记录电脑
打印纸
有分241和381通用两种规格。这里的241和381指的是他的宽度,通常用的时候来分层,可以分1至6层,颜色有白红黄绿蓝白,对于它的白色,分显色和不显色两种。第一层一般是不显色的。对于想做几层,做纸的公司一般都是可以帮你做的。1窄行打印机241mm(80列)纸宽的单联或多联带孔连续,381mm(132列)纸宽的单联或多联带孔连续
打印纸
就说得比较专业了。做起来可...
带孔的
打印纸
怎么设置_带孔电脑
打印纸
规格尺寸的相关知识及应用范围
1.带孔电脑
打印纸
规格尺寸的相关知识及应用范围。带孔电脑
打印纸
有分241mm和381mm通用两种规格。这里的241mm和381mm指的是的宽度,通常用的时候来分层数,可以分为1至6层甚至7、8层之多,
打印纸
的颜色有白、红、蓝、绿、黄五种,而白纸有两种就是分显色和不显色之分,一般情况下第一层是不显色的,对于贵公司需要几层的电脑
打印纸
,我们都可以满足你们的需求的。241mm也可以称之为80列,381m...
链式
打印纸
尺寸
打印纸
的
长度
尺寸2孔为1英寸,1英寸等于2.54mm,11英寸等于27.94cm(2.54*11) 所以6孔的纸尺寸为7.62(2.54*3) 附: 1英寸=2.54厘米1厘米=0.3937008英寸1英尺=12英寸 1英尺=30.48厘米1英寸=0.0833333英尺 1码 = 91.44厘米...
打印纸
张尺寸换算_各种
打印纸
的尺寸是多少?
展开全部常用
打印纸
尺寸为:A4(16k)297mm×210mm;A5(32k)210mm× 148mm;A6(64k)144mm×105mm;A3(8k)420mm×297mm。按照尺寸的大小,通常62616964757a686964616fe4b893e5b19e31333431343738分三种类型:大型开本、中型开本和小型开本。以787×1092的纸来说,12开以上为大型开本,16~36开为...
二等分计算机打印机尺寸,电脑
打印纸
三种等分是什么尺寸
满意答案kimwk2015.11.10采纳率:55%等级:8已帮助:6710人
打印纸
一般规格有宽度为241mm的和381mm的,三等分就是341/381-3,而长边这边尺寸也是固定的,是280mm。一般长边
长度
可以分等分,有不分等分(即214*280mm)、两等分(即241*140mm)、三等分(241*93mm)一般只分到三等分。1:电脑
打印纸
基础规格一般两种:一种宽度241MM*280...
DataWindow
611
社区成员
20,469
社区内容
发帖
与我相关
我的任务
DataWindow
PowerBuilder DataWindow
复制链接
扫一扫
分享
社区描述
PowerBuilder DataWindow
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章