打印过滤器定义通知 LP 打印服务有关过滤器、要运行的打印过滤器程序、打印过滤器执行的转换种类等的信息。在 /etc/lp/fd 目录中提供了一组过滤器描述符文件。这些文件描述过滤器的特征(例如,快速过滤器或慢速过滤器),并指向过滤器程序(例如 /usr/lib/lp/postscript/postdaisy)。
定义新的打印过滤器时,必须创建打印过滤器定义。
打印过滤器定义包含 LP 打印服务所用的以下信息:
要运行的过滤器程序的名称
过滤器程序接受的输入类型
过滤器程序生成的输出类型
过滤器程序可以向其发送作业的打印机类型
过滤器程序可以向其发送作业的特定打印机的名称
过滤器类型(快速或慢速)
选项
可以将特征作为直接输入键入 lpfilter 命令中。还可以创建一个指定过滤器特征的文件,并将该文件的名称作为 lpfilter 命令参数的输入。这样的文件称为过滤器描述符文件,应位于 /etc/lp/fd 目录中。这些文件本身不是过滤器。但它们指向过滤器。
不管是在文件中存储信息,还是直接在命令行上键入信息,请使用以下格式:
Command: command-pathname [options] Input types: input-type-list Output types: output-type-list Printer types: printer-type-list Printers: printer-list Filter type: fast or slow Options: template-list |
如果为除 Options 之外的任何过滤器特征提供多个定义(即多行),则打印服务仅使用第二个定义。
信息可以按任何顺序进行排列,并不是所有信息都是必需的。如果不指定值,则缺省情况下赋予下表所示的值。这些值不是非常有用,这就是应指定值的原因。
表 10–1 lpfilter 命令的缺省值
项 |
缺省值 |
---|---|
Input types(输入类型) |
any |
Output type(输出类型) |
any |
Printer types(打印机类型) |
any |
Printers(打印机) |
any |
Filter type(过滤器类型) |
slow |
使用过滤器程序的全路径。如果存在程序始终需要的任何固定选项,则此处包括所有选项。
输入类型是打印过滤器可以处理的文件内容类型的列表。LP 打印服务确实限制输入类型的数目,但是大多数过滤器只能接受一种输入类型。有几种文件类型非常类似,因此过滤器可以处理它们。可以使用喜欢的任何名称,但名称最多只能包含 14 个字母数字字符和短划线。不要将下划线用作输入类型名称的一部分。
LP 打印服务使用这些名称将过滤器与文件类型进行匹配,因此请遵循一致的命名约定。例如,如果多个过滤器可以接受相同的输入类型,则在为每个过滤器指定该输入类型时,请使用相同名称。将这些名称通知用户,以便他们在提交文件进行打印时知道如何标识文件类型。
输出类型是过滤器可以作为输出生成的文件类型的列表。对于每种输入类型,过滤器将生成一种输出类型。但是,输出类型可能随作业的不同而不同。输出类型的名称不能超过 14 个字母数字字符和短划线。
输出类型的名称应与可用(本地或远程)打印机的类型匹配,或者与其他过滤器处理的输入类型匹配。如果 LP 打印服务发现转换文件需要用不同的过滤器过滤若干遍,则它会将这些过滤器组合在一个 shell 流水线中。您可能不需要此复杂级别,但 LP 打印服务具有此复杂处理功能。请尝试找出这样一组过滤器:它们将用户可能希望打印的所有不同文件作为输入类型,并将那些文件直接转换为打印机可以处理的文件类型。
打印机类型是打印过滤器可以将文件转换成的打印机类型的列表。对于大多数打印机和过滤器,可以将过滤器定义的此部分留空,因为此列表与输出类型的列表完全相同。但是,此列表可能是不同的。例如,为达到初始化目的,可能具有仅包含一种打印机类型的打印机。但是,该打印机可以识别几种不同的文件内容类型。在本质上,此打印机具有将各种文件类型转换为它可以处理的过滤器类型的内部过滤器。因此,过滤器可能生成与打印机可以处理的文件类型匹配的几种输出类型之一。应将打印过滤器标记为使用该打印机类型。
作为另一个示例,您可能具有列为接受相同文件类型的两种不同型号的打印机。但是,由于产品制造中的细微差异,一个打印机会偏离它所产生的结果。将打印机标记为不同的打印机类型,比如说 A 和 B,其中 B 是偏离的打印机。创建一个调整文件的过滤器,以说明 B 类型打印机产生的偏差。由于 B 打印机类型才需要此过滤器,因此将此过滤器列为仅在 B 类型打印机上起作用。
打印过滤器通常可以处理接受其输出的所有打印机,因此通常可以跳过过滤器定义的此部分。
但是,可能具有一些不适合于过滤器生成的输出的打印机。例如,可能希望将一台打印机专用于快速周转,仅将不需要过滤的文件发送到该打印机。对于需要先进行广泛过滤才能打印的文件,可以使用类型相同的其他打印机。
LP 打印服务可识别快速过滤器和慢速过滤器,如过滤器的类型中所述。
打印模式通过使用 lp -y 命令调用的慢速过滤器必须运行在从其发出打印请求的系统上。LP 打印服务无法将模式值传递到打印服务器。但是,它可以将文件内容类型(在 lp 命令的 -T 选项之后指定)与打印服务器上的内容类型进行匹配。因此,如果要在打印服务器上激活特殊模式,则必须指定允许 LP 打印服务将输入类型和输出类型进行匹配的内容类型。
选项指定如何将不同类型的信息转换为过滤器命令的命令行参数。此信息可以包括来自用户的规范(通过打印请求)、打印机定义和用于处理请求的任何过滤器实现的规范。
定义打印过滤器选项的信息源有 13 个,其中每个信息源都由一个关键字表示。每个选项都是在模板中定义的。模板是过滤器定义中的一条语句,定义要基于过滤器特征之一的值传递到过滤器命令的选项。
在过滤器定义中指定的选项可以不包括任何关键字、包括全部 13 个关键字或 13 个关键字的任何子集。此外,如果完整的过滤器定义需要多个定义,则可以多次定义单个关键字。下表包含可用于在打印过滤器定义中定义选项的 13 个关键字的描述。
表 10–2 打印过滤器选项的关键字
关键字 |
模式 |
示例 |
|
---|---|---|---|
内容类型(输入) |
INPUT |
content-type |
troff |
内容类型(输出) |
OUTPUT |
content-type |
postscript, impress |
打印机类型 |
TERM |
printer-type |
att495 |
打印机名称 |
PRINTER |
printer-name |
lp1 |
字符间距 |
CPI |
scaled-decimal |
10 |
行间距 |
LPI |
scaled-decimal |
6 |
页长 |
LENGTH |
scaled-decimal |
66 |
页宽 |
WIDTH |
scaled-decimal |
80 |
要打印的页数 |
PAGES |
page-list |
1-5,13-20 |
字符集 |
CHARSET |
character-set |
finnish |
表单名称 |
FORM |
form-name |
invoice2 |
份数 |
COPIES |
integer |
3 |
MODES |
mode |
landscape |
打印过滤器定义可以包括多个模板。多个模板可在同一行上输入,由逗号分隔;也可在不同的行上输入,在前面加 Options: 前缀。
模板的格式如下: keyword pattern = replacement
keyword 标识为过滤器的特定特征注册的选项类型。
pattern 是关键字的特定选项。
replacement 是关键字具有指定值时发生的情况。
作为如何为特定过滤器定义选项的示例,假定希望打印服务调度程序按照以下条件将打印请求指定给过滤器:
如果要由过滤器生成的 OUTPUT 类型为 impress,则将 -I 选项传递到过滤器。
如果要由过滤器生成的 OUTPUT 类型为 postscript,则将 -P 选项传递到过滤器。
要指定这些条件,请将以下模板作为 lpfilter 命令的选项提供:
Options: OUTPUT impress=-I, OUTPUT postscript=-P |
如果 Options 行变得太长,则将每个模板放置在单独的行上,如下所示:
Options: OUTPUT impress=-I Options: OUTPUT postscript=-P |
在这两个模板中,keyword 被定义为 OUTPUT。在第一个模板中,模式为 impress,replacement 的值为 --I。在第二个模板中,pattern 的值为 postscript,replacement 的值为 -P。
要确定为每种类型的模板(即,对于每个关键字的 pattern 和 replacement 参数)提供哪些值,请考虑以下事项:
INPUT 模板的值来自需要由过滤器转换的文件内容类型。
OUTPUT 模板的值来自必须由过滤器生成的输出类型。
TERM 模板的值是打印机类型。
PRINTER 模板的值是将打印最终输出的打印机的名称。
CPI、LPI、LENGTH 和 WIDTH 模板的值来自用户的打印请求、所用表单或打印机缺省值。
PAGES 模板的值是应打印的页的列表。通常,该值由用逗号分隔的页范围的列表组成。每个页范围由用短划线分隔的数字对或单个数字组成。(例如,1–5,6,8,10 指示第 1 页到第 5 页,以及第 6 页、第 8 页和第 10 页。)但是,在 -P 选项中为打印请求提供的任何值在传递后都保持不变。
CHARSET 模板的值是要使用的字符集的名称。
FORM 模板的值是由 lp -f 命令(用于提交打印请求的命令)请求的表单的名称。
COPIES 模板的值是要打印的文件的份数。如果过滤器使用此模板,则 LP 打印服务将它打印的已过滤文件份数减少到一份。此“单个副本”包括由过滤器生成的多个副本。
MODES 模板的值来自 lp -y 命令。由于用户可以指定几个 -y 选项,因此 MODES 模板可能具有几个值。这些值按用户指定的从左到右的顺序进行应用。
replacement 选项显示应如何将模板的值提供给过滤器程序。此部分通常为文字选项,有时包含占位符星号 (*) 以显示将值传递到的位置。pattern 和 replacement 选项还可以使用 ed 命令的正则表达式语法,进行从用户输入选项到过滤器选项的更复杂转换。支持 ed 的所有正则表达式语法,其中包括 \( ... \) 和 \n 结构。这些结构可用于提取 pattern 选项的部分,以复制到 replacement 选项,而 & 选项可用于将整个 pattern 选项复制到 replacement 选项。有关更多信息,请参见 ed(1) 手册页。
如果在 pattern 或 replacement 选项中包括了逗号或等号 (=),则在该字符前面添加反斜杠 (\)。在使用 pattern 或 replacement 选项时,将删除其中任何字符前面的反斜杠。