浅谈VFP报表打印的问题

时间:2022-02-21 18:32:51 好文 我要投稿

浅谈有关VFP报表打印的问题

  1.如何打印指定的页

  通常情况下,VFP默认打印当前报表的全部内容,这给使用者带来不便,那么如何实现让系统打印指定范围的内容呢?其实很简单,只需在报表打印语句中加上关于打印范围限制的关键字短语RANGE即可。如:打印报表XXX.FRX的第2至第5页,可使用如下命令

  REPORT FORM XXX.FRX RANGE 2,5 TO PRINTER

  为增强该语句功能的灵活性,可引入表示欲打印范围的两个参数x和y,分别代表打印的起始和终止页码,将打印命令改写为

  REPORT FORM XXX.FRX RANGE x,y TO PRINTER

  2.如何计算总页数,以实现每页均打印“第x页 共y页”字样

  VFP系统变量 _PAGENO 可提供当前的打印页号,但却没有能返回总页数的系统变量,若要实现在报表的`每一页均打印“第x页 共y页”字样,打印前可根据细节区所打印的记录条数,进行计算,然后再打印,实现方法如下:

  PUBLIC mPAGE

  SELE XXX   && XXX为欲打印报表的数据源

  XX=35     && XX为每页报表细节区所打印的记录条数

  mPAGE=IIF(MOD(RECC(),XX)=0,RECC()/XX,INT(RECC()/XX)+1) &&mPAGE为报表总页数

  在报表页脚注(或其他合适位置)添加如下信息即可:

  "第 "+allt(str(_pageno))+" 页  共 "+allt(str(mPAGE))+" 页"

  3.如何使计算机打印纸张类型适合于所设计报表

  报表在设计时能够正常打印,可是安装到其他计算机或重装系统后,就会出现“XXX 带区太大不能放入页中”等提示,而且无法正常退出(尤其是对报表设计时采用自定义纸张的程序),这是为什么呢?现作如下解释:

  我们用报表设计器设计的报表打印程序,保存退出后,磁盘上就会出现 .FRX和.FRT文件,我们的所有设计均保存在这两个文件中。在VFP中 .FRX相当于.DBF表,.FRT相当于.FPT备注型文件,我们用USE XXX.FRX可以象打开.DBF文件一样打开.FRX文件,在.FRX文件中有个Expr备注型字段名,在这个字段名中有如下与打印设置相关的内容(不同设置内容稍有差别):

  DRIVER=winspool

  DEVICE=Epson LQ-1600K

  OUTPUT=LPT1:

  ORIENTATION=0

  PAPERSIZE=256

  PAPERLENGTH=2800

  PAPERWIDTH=2400

  DEFAULTSOURCE=8

  PRINTQUALITY=180

  YRESOLUTION=180

  TTOPTION=1

  其中:

  DEVICE=Epson LQ-1600K 表示系统默认打印机类型为Epson LQ-1600K

  PAPERSIZE=256    该值256表示是自定义纸张(若=9 表示A4纸张、=13表示B5纸张)

  PAPERLENGTH=2800   表示报表设计时纸张长度

  PAPERWIDTH=2400   表示报表设计时纸张宽度

  实际打印时之所以会上述提到的问题,是因为在用户环境中或Windows系统重新安装后,系统一般默认的是A4打印纸,与我们设计时保存在.frx文件里的纸张类型不符,因而造成打印出错。为此,笔者编写了如下一段检测纸张类型的代码,这段代码可以帮助我们很好地解决因纸张类型不符所带来的问题。

  USE xxx.frx IN 0 ALIAS mFrx      &&在空闲工作区以mFrx别名打开xxx.frx文件

  x=atcline(#39;PAPERSIZE#39;,mFrx.Expr)    &&取得参数PAPERSIZE在Expr字段中的行

  mTYPE_1=subs(mline(mFrx.Expr,x),11)  &&取得设计时保存的纸张类型

  mTYPE_2=allt(str(Prtinfo(2)))      &&取得当前打印机默认的纸张类型

  x=atcline(#39;PAPERLENGTH#39;,mFrx.Expr)  &&取得纸张长度在Expr字段中的行

  mLEN=subs(mline(mFrx.Expr,x),13)    &&取得纸张长度

  x=atcline(#39;PAPERWIDTH#39;,mFrx.Expr)   &&取得纸张宽度在Expr字段中的行

  mWIDTH=subs(mline(mFrx.Expr,x),12)  &&取得纸张宽度

  use in #39;mFrx#39;              &&关闭xxx.frx文件

  if mTYPE_1=mTYPE_2        &&如果相符,则正常打印

  report form xxx.frx to printer noconsole

  else

  Messagebox(#39;请设置打印机纸张类型为自定义:长=#39;+mLEN+#39;,宽=#39;+mWIDTH,0+48+0,#39;提示#39;)

  report form xxx.frx to printer prompt

  end

【浅谈有关VFP报表打印的问题】相关文章:

幼儿饮食应注意的问题02-19

浅谈说课的六要四忌02-19

男人健身时要注意的问题02-19

网络上瘾成儿童首要的问题02-19

关于孩子上户口的问题范文02-19

离婚孩子的抚养权问题介绍02-19

身体出现问题的8个征兆02-19

关于高速公路开车的常见问题02-19

骑单车时要注意哪些问题02-19

橙子能解决哪些皮肤小问题02-19