VFP不安装打印驱动直接调用打印而且不自动进纸

来源:互联网 发布:梦三国2脚本怎么编程 编辑:程序博客网 时间:2024/04/29 21:29

   之前程序要打印都是利服报表(report),设置好打印格式后,就调用report from 来打印,这样有其优点就是更改打印格式容易,但缺点是一定要安装打印机,而且要设好纸张,比如设好了A4纸,那么打印时每走一张A4纸高度就会自动进纸重新打第二页,而且打印驱动通常都自动设了页边距,这部份页边距不同于打印时设置的那些页边距,驱动中设有的页边距是不可调的,也就是说,要想打一页纸从最上边一直打印到最下面是不可能的,他总是会留下一定的上边距下页距.

   这对于要一此特殊的情况就不适用了,比如POS的打印,大多的POS打印机都没有打印驱动的,就算有要找也麻烦,找了还要装,重装了电脑,又要重装驱动,这样对于一套软件来说,其维护的成本无形就增大了,而且中国人节约的优良传统也是其最大的障碍,很多公司都要打日记帐,一打就是几十页甚至几百页,如果每一页都留有上下边距,那无形中就是一个很大的浪费,正因为此,就引申出了今天这个文章.

 

旧版本的VFP是用@ Say 来送出打印的,这个功能一直被继承到了现在,要实现不用驱动,直接打印,最主要就是利用@ Say 把所要打印的内容送到一个*.PRN打印文件中,然后,再把这个文件复制到LTP的打印口,就可以了.代码如下.

SrPrint()
SET SAFETY OFF
SET DEVICE TO FILE output.prn             &&生成打印文件

SELECT 0
USE _lj
Gs1=ALLTRIM(Gs_F)
USE

@ PROW(),0 SAY GS1+IIF(EMPTY(_Spdjhc1.Sm1_F)," 草稿","")
@ PROW()+1,0 SAY "小票清单"
@ PROW()+1,0 SAY "日期:"+DTOC(DATE())+" 收银:"+ALLTRIM(_Spdjhc1.P_Zdr_F)
@ PROW()+1,0 SAY _Spdjhc1.Sm1_F+" 会员:"+ALLTRIM(_Spdjhc1.P_Hy_F)
@ PROW()+1,0 SAY "──────────────"
@ PROW()+1,0 SAY " 品名                批号"
@ PROW()+1,0 SAY " 厂家"
@ PROW()+1,0 SAY " 批准文号"
@ PROW()+1,0 SAY " 数量       售价     售额"
@ PROW()+1,0 SAY "──────────────"
SELECT _Spdjhc2
SCAN FOR NOT EMPTY(Spzd_Sp_F)
 @ PROW()+1,0 SAY PADR(LEFT(_Spdjhc2.P_Sp1_F,20),20," ")+ALLTRIM(_Spdjhc2.Scph_F)  &&商品 批号
 @ PROW()+1,0 SAY ALLTRIM(_Spdjhc2.P_Kh1_F)       &&厂家
 @ PROW()+1,0 SAY ALLTRIM(_Spdjhc2.Pzwh_F)       &&批准文件号
 @ PROW()+1,0 SAY ALLTRIM(STR(_Spdjhc2.Sl_F,20,4))     &&数量
 @ PROW(),9 SAY ALLTRIM(STR(_Spdjhc2.Xsdjhs_F,20,2))     &&售价
 @ PROW(),18 SAY ALLTRIM(STR(_Spdjhc2.Xsjehs_F,20,2))    &&金额
 @ PROW()+1,0 SAY "──────────────"
ENDSCAN
@ PROW()+1,0 SAY "应收:"+ALLTRIM(STR(_SPDJHC1.sxlj_F,20,2))+" 实收:"+ALLTRIM(STR(_SPDJHC1.TETSSJE_F,20,2))
@ PROW()+1,0 SAY "找零:"++ALLTRIM(STR(_SPDJHC1.TETSSJE_F-_SPDJHC1.sxlj_F,20,2))
@ PROW()+2,0 SAY ""
@ PROW()+1,0 SAY ""
SET DEVICE TO SCREEN
COPY FILE output.prn TO lpt1.dos           &&送到LPT1打印口
SET SAFETY ON