2 FreeBSD handbook中文版 11 打印 高级打印机设置 A.过滤器( 七 )


#
# Convert and print. Return value from dvilj2p does not seem to be
# reliable, so we ignore it.
第36 页#
dvilj2p -M1 -q -e- dfhp$$.dvi
#
# Clean up and exit
#
cleanup
exit 0
11.4.1.4.5 自动转换:用过滤程序转换外的另一种选择
上面这些过滤程序完整地建立了你的打印环境,但是使用者们必需自己决定要使用哪一
个过滤程序(对lpr 命令下的参数) 。如果你的使用者们并不擅长于使用计算机,要它们自己
选择适当的过滤程序来使用可能会造成它们的困扰 。更严重的是,万一使用到不正确的过滤
程序来转换格式,那么可能会让你的打印机浪费许多不必要纸 。
除了安装所有的转换用过滤程序外,你也许会想要试试文字过滤程序(默认的过滤程序)
自动扫描要打印的文件格式,同时自动呼叫其它的转换用过滤程序做适当的转换 。像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 或是其它控制纸张移动的命令 。因此这些结果可能不是你想

推荐阅读