除了安装所有的转换用过滤程序外,你也许会想要试试文字过滤程序(默认的过滤程序)
自动扫描要打印的文件格式,同时自动呼叫其它的转换用过滤程序做适当的转换。像file
这样的工具对于这方面可能对这会有些帮助。然而,要区分出某些文件格式可能会有点困难
—当然,你也可以提供专门转换这些格式的过滤程序。
FreeBSD ports 里有一个叫做apsfilter 的文字过滤程序可以做文件类型的自动扫描及
转换。它可以分辨出纯文本、PostScript 以及DVI 文件,然后做适当的格式转换后再打出。
11.4.1.5 输出用的过滤程序
LPD spooling 系统还支持一种我们还未介绍的过滤程序:输出用过滤程序。输出用过滤
程序和文字过滤程序一样,只有打印纯文本才使用的,但是它简单多了。如果你用了输出用
过滤程序但是没有用文字过滤程序,那么:
1. LPD 在一份工作里将只执行一次输出用过滤程序,而不是为每一个文件都执行一
次。
2. LPD 不会提供任何辨认文件开始或结束的信息给输出用的过滤程序。
FreeBSD 使用手册
第37 页FreeBSD 使用手册
3. LPD 不会将使用者的帐户及机器名称传给过滤程序,因此它不能做统计的动作。事
实上,它只有得到两个参数:
filter-name -wwidth -llength
其中width 是由打印机设置里的pw 关键词所设置的,而length 是由pl 关键词所设置
的。请不要被输出用过滤程序简单的特性误导了。如果你想要用输出用过滤程序让一份工作
里每个文件都重新的一页开始打印,那是行不通的。你应该用的是文字过滤程序(也称为输
入用过滤程序),请参考安装文字过滤程序这一节。严格的说,输出用过滤程序实际上是较
复杂的,因为它必需检查送给它的数据是否含有特殊的字符,并代替LPD 送信号给自己。
如果你需要打印header pages 或是需要送控制字符等其它的初始化字符串使得可以打印
header page,那么一个输出用过滤程序是必要的。(但是如果你是为了要向使用者收取打印
header page 的费用的话,那么这是没有用的。因为LPD 不会将任何使用者及机器的信息传
给输出用过滤程序。)
LPD 允许一台打印机上同时拥有输出用过滤程序和文字过滤程序。在这个情况下,LPD
会执行输出用过滤程序打印header page(请阅读Header Pages 这一节),然后LPD 会送2 个
字节给这个过滤程序:ASCII 031 以及ASCII 001 时期望输出用过滤程序将自己停下来。当
输出用过滤程序看到这两个字节(031,001)时,它应该要送SIGSTOP 这个信号给自己。当
LPD 运行完其它的过滤程序后,会送SIGCONT 这个信号将输出用过滤程序重新激活。
如果只有输出用过滤程序但没有文字过滤程序,且LPD 是要打印纯文本,那么LPD 将
会用输出用过滤程序来做这些工作。输出用过滤程序将会直将的将打印工作中的文件序输出
到打印机而不会送出form feed 或是其它控制纸张移动的命令。因此这些结果可能不是你想
要的。几乎在所有的情况下,你都需要一个文字过滤程序。
我们以前介给过lpf 程序,不但可以作为文字过滤程序,也可以当作输出用过滤程序使
用。如果你需要快速的设置好输出用过滤程序,但你不想自己写扫描资料字符及发送信号的
程序代码,那么你可以试试lpf。你也可以在shell script 中使用lpf 将必要的初始化句
柄送给打印机。
11.4.1.6 lpf:文字过滤程序
FreeBSD 里附带的/usr/libexec/lpr/lpf 是一个文字过滤程序(输入用过滤程序)。它可
以处理缩进(命令lpr -i)、原封不动地打出资料(以lpr -l 命令送出的工作)、根据倒退字
第38 页FreeBSD 使用手册
符及TAB 字符调整打印的位置,以及统计打印张数。它也可以拿来当作输出用过滤程序。
lpf 适合在许多打印环境下使用。虽然它无法送初始化句柄给打印机,但是我们可以很容易
的写一个shell script 送出需要的初始化句柄后再执行lpf。
为了让lpf 可以正确的做打印张数统计,我们需要在/etc/printcap 文件里为pw 及pl
关键词填入适当的值。它根据这些值来计算一张纸上可以打多少字,以及打印使用者的工作
需要用几张纸。关于打印机的统计问题,请阅读统计打印机使用情况里更详细的说明。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




