2008/02/25 | VFP关于打印机的问题
类别(数据库学习笔记) | 评论(0) | 阅读(772) | 发表于 11:43

在一台计算机上,无论hp1010  hp1020 ,一编译好的。都可以使用。使用了一个月。

今天,突然不行了,出现 打印机驱动加载 无法加载驱动程序。

很郁闷。耽误了1个小时的报名。

今天就来解决1下:

方法1:

SET   PRINTER   TO   [DEFAULT   |   NAME   WindowsPrinterName]  
   
  或者  
   
  SET   PRINTER   TO   NAME   \\ServerName\PrinterName  
  解释:  
  TO   [DEFAULT   |   NAME   WindowsPrinterName]    
      把打印机输出传送到默认的   Windows   打印机或指定的   Windows   打印机。Windows   打印机的名称保存在   WIN.INI   中。    
  可用   GETPRINTER(   )   或   APRINTERS(   )   确定当前已安装的打印机名称。如下命令将显示Windows打印机对话框并且直接把打印输出传送到指定的打印机上:    
  SET   PRINTER   TO   NAME   GETPRINTER()  
   
   
  TO   NAME   \\ServerName\PrinterName    
      仅用于   Windows   NT   4.0   及以上版本。将脱机打印输出到网络打印机。    
  ServerName   是打印服务器的网络名称。这一名称由网络管理员指定,并且必须是唯一的。    
   
  PrinterName   指定打印机的名称。这一名称也是由网络管理员指定的。

方法2:

方法二

在程序里加上一个选择打印机的功能不就行了吗?我的做法:在主菜单下增加一个子菜单【选择打印机】,命令为:SYS(1037),即可!简单实用吧!不用另外做form。  (这个问题好像不能解决驱动不配的问题)


方法三

//这个估计可以实施试验一下:
USE (your report file name).frxGO TOPBLANK FIELDS Expr, Tag, Tag2USE

方法四:

http://www.foxsky.net/latest-118.aspx

上次介绍了如何将数据直接发往打印机,该方法在直接编程打印时非常方便,但却无法解决 vfp 的报表输出问题,因为它必然要使用 Windows 的打印机驱动程序,也无法解决没有硬字库的打印机要打印汉字的问题。其实这不光是 foxer 的困惑,只要使用 Windows 驱动来打印,都会存在难以即打即停的问题。foxer 们拥有一个系统自带的强大报表,然而如果使用它来输出,肯定要使用 Windows 的打印驱动程序,可是大部分国内用户都很介意最后一页打印完后的走纸问题,可能是咱们中国人以前生活一直不富裕,所以节约惯了,不习惯于 Windows 按打印任务页的方式来走纸,总是希望最大程度的节约打印纸张。

好了,今天告诉你如何做到打印完后不走纸!要做到这一点,并不需要使用自定义纸张。我们从易到难,先解决不足一页的报表打印问题。很多时候一份单据只使用了整页纸(假设是 A4 或窄行连续纸)的一部分,用户介意的也大部分属于这种情况。

不知道有多少人还记得 prn 格式的文件,随便打开一个 Word,从菜单中选择 '打印',可以看到存在一个 '打印到文件' 的选项,想到什么了吗?我的方案就是从这里得到灵感的!我们先使用 report ... to file ...(记住:这里不要加 ascii 关键字) 将打印输出到一个文件,然后对文件进行简单加工,再使用上一部分介绍的 RawDat2Prt 函数或 ??? 命令直接将这个文件的内容输出到打印机就可以做到即打即停了。这样来处理,我们仍然可以使用 vfp 的报表和 Windows 的打印驱动功能,可以将数据输出到本地或网络打印机。

这里要告诉你的就是,这个输出文件中内容已经是经过打印驱动程序处理过的打印指令和图形数据集合,Windows 打印之所以最后总是要走纸到页尾,是因为最后的部分中有一个换页命令!我们只需要简单的将这个换页命令删除掉后输出给打印机,那么就...

当然这里仍然要声明一点,这种方法只适用于针打(主要测试了 LQ 和 OKI 系列) ...

我的示例中使用了 RawDat2Prt 的方法来输出到打印机,你也可以用 ??? 来输出,不过 ??? 命令有一个小小的问题,就是无法直接输出 CHR(123) 字符,由于文件中的数据大部分是图形数据,你无法保证其中不存在这个字符,所以如果使用 ??? 的话还需要另外处理,简单的话可以将 123 全部替换成 121,这样只是少了一个点,没有人可以看出打印出的东西有什么区别,但如果这个字符刚好是一个命令的一部分,或者刚好是一个小数点呢 ...

0

评论Comments