分享
 
 
 

FreeBSD handbook中文版 11 打印 (2)高级打印机设置 B.Header Pages

王朝system·作者佚名  2006-11-23
窄屏简体版  字體: |||超大  

=============================================================

11.4 高级打印机设置

=============================================================

11.4.2 Header Pages

如果你有很多使用者使用不同的打印机,那么你也许会觉得需要打印header pages。

Header pages,也称做banner 或burst pages,是用来辨认打出来的工作是属于谁的。通

常header pages 以粗体的大字,可能再加上外框打出来的,如此,使用者才能快速的在一堆

打出的结果找到属于自己的部分。不过header page 的缺点就是每个工作都会多使用一张纸

来打印header page。它的功用可能不会超过一分钟,而最后的下场都是丢进资源回收箱或是

垃圾筒。(不过header pages 是一份工作一张,而不是一个文件一张,所以纸张的浪费可能没

有你想象的那么严重)。

如果你的打印机可以直接打印纯文本的话,那么LPD 可以自动为你的输出加上header

pages。如果你的打印机是PostScript 的,那么你将会需要额外的程序来产生header page;请

阅读在PostScript 打印机上打印Header Pages 这一节。

11.4.2.1 启用header pages

在简单的打印机设置这节里,我们在/etc/printcap 文件里利用设置sh 以不打印header

page (sh 即“suppress header”的意思)。如果某一台打印机要打印header pages 的话,那么只

要将sh 关键词删除就行了。

看起来是不是很简单?

没错。你也许需要提供一个输出用过滤程序将初始化句柄送给打印机。下面是一个适用

于Hewlett Packard PCL 兼容打印机使用的输出用过滤程序:

#!/bin/sh

#

# hpof - Output filter for Hewlett Packard PCL-compatible printers

# Installed in /usr/local/libexec/hpof

printf “\033&k2G” || exit 2

第39 页FreeBSD 使用手册

exec /usr/libexec/lpr/lpf

我们用of 关键词来指定输出用过滤程序的路径。请阅读输出用的过滤程序这一节以

取得更多的信息。

下面是一个为我们先前提到的打印机teak 在teak 文件里设置要打印header pages 及输

出用过滤程序的例子:

#

# /etc/printcap for host orchid

#

teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\

:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\

:if=/usr/local/libexec/hpif:\

:vf=/usr/local/libexec/hpvf:\

:of=/usr/local/libexec/hpof:

现在,当使用者用teak 打印时,它们每个工作都会有一张header page。如果使用者们

愿意花时间自己找出自己打出的东西,那么它们可以用lpr -h 命令设置不打出header pages;

请阅读Header Page 参数以得知更多lpr 的参数。

注意: LPD 打完header page 后会送出form feed 字符。如果你的打印机送出纸张的命令

不是用这个字符,你可以在/etc/printcap 文件中用ff 关键词指定。

11.4.2.2 控制header pages

如果选择要打印header pages,LPD 将会产生出long header,这将使用者、机器以及工

作名称以大字打印在一整页上。这里有一个例子(kelly 从rose 这台印机打印outline 这个工

作):

k ll ll

k l l

k l l

k k eeee l l y y

k k e e l l y y

k k eeeeee l l y y

kk k e l l y y

第40 页ll

FreeBSD 使用手册

k k e e l l y yy

k k eeee lll lll yyy y

y

y y

yyyy

t l i

t l

oooo u u ttttt l ii n nnn eeee

· o u u t l i nn n e e

· o u u t l i n n eeeeee

· o u u t l i n n e

· o u uu t t l i n n e e

oooo uuu u tt lll iii n n eeee

r rrr oooo ssss eeee

rr r o o s s e e

r o o ss eeeeee

r o o ss e

r o o s s e e

r oooo ssss eeee

Job: outline

Date: Sun Sep 17 11:04:58 1995

LPD 在打印完这些后会送出form feed 字符,使得真正的打印工作会以新的一页开始打

印(除非你在/etc/printcap 文件为指定的打印机设置了sf (supress form feeds))。

第41 页FreeBSD 使用手册

如果你希望LPD 打印short header,那么在/etc/printcap 文件里使用sb (short banner)

即可。这样打出来的header page 看起来会像下面这个样子:

rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995

LPD 的默认值是先打印header page 再打印工作。如果你想要调换顺序,那么在

/etc/printcap 里使用hl (header last) 即可。

11.4.2.3 统计打印

如果我们打印LPD 内建的header pages,那么在做统计时可能会遇到一个问题:header

pages 得免费提供。为什么?因为只有控制打印header page 的输出用过滤程序可以在打印

header pages 时做打印统计,但是这个过滤程序却没有使用者及机器的资料或是一个统计资

料文件,所以无法向使用者收钱。我们也不能在文字过滤程序或是转换用过滤程序(这些过

滤程序可以直接取得使用者及机的资料)将统计结果都“多加上一页”,因为使用者可以用

lpr -h 命令设置不要打印header page,而你可能就向这些使用者多收了打印header page 的

费用。基本上,lpr -h 是许多较环保的使用者喜好的参数,你无法鼓励别人不去使用它。

而修改每个过滤程序使它们都可以打出header page 也是不可行的(虽然这么做就可以正

确的计费)。因为LPD 并不会把使用者有没有使用-h 的信息传给过滤程序,这么一来,即

使使用者下了lpr -h 的命令要求不打印header page,它仍然会因为得到一张header page 而

多收取了这个费用。

那么,有什么好办法呢?

你可以:

1. 接收LPD 的缺点,不收取打印header page 的费用。

2. 安装可以取代LPD 的程序,比如说LPRng 或是PLP。请参考标准Spooler 之外的选择

这一节所介绍其它可以替代LPD 的程序。

3. 撰写一个聪明的输出用过滤程序。在打印header page 及纯文本时,如果没有文字(输入

用)过滤程序,那么一般的输出用过滤程序只做初始化打印机以及一些简单的字符转换

工作。如果有设置文字过滤程序,那么LPD 只会用输出用过滤程序来做打印header page

的工作。事实上,输出用过滤程序可以根据从LPD 产生的header page 资料来判断打印

工作的使用者及机器而加以收费。唯一的问题就是输出用过滤程序会无法取得记录使用

情况的记录文件(由af 关键词所指用的记录文件不会被传入),但是如果你的记录文件

是固定的,你可以这个文件直接设置在输出用过滤程序里。如果你考虑要用这种方式来

第42 页FreeBSD 使用手册

处理的话,那么在/etc/printcap 文件使用sh (short header) 关键词使判断的工作较容

易。上述的做法其实可能是很麻烦的,比较起来,使用者应该会较感谢让打印header page

免费的管理者。

# Check arguments

#

11.4.2.4 在postscript 打印机上打印header pages

前面提到LPD 可以为打印机产生合适的纯文本header page,当然,因为PostScript 不

能直接打印纯文本,所以LPD 产生header page 的工能在PostScript 打印机上是用不到的—

或是几乎用不到。

一个直接产生header page 的方法是让所有的转换用过滤程序及文字过滤程序产生

header page。过滤程序可以让使用者及机器的参数产生合适的header page。这个方法的缺点

就是即使使用者以lpr -h 的方式送出工作,它们仍然会得到header pages。

让我们来试试这个方法。下面的script 可以接收三个参数(使用者名称、机器名称以及

工作名称)并产生PostScript 打印机能打印的header page:

#!/bin/sh

#

# make-ps-header - make a PostScript header page on stdout

# Installed in /usr/local/libexec/make-ps-header

#

#

# These are PostScript units (72 to the inch). Modify for A4 or

# whatever size paper you are using:

#

page_width=612

page_height=792

border=72

#

第43 页if [ $# -ne 3 ]; then

exit 1

fi

#

#

user=$1

host=$2

job=$3

date=‘date‘

#

#

exec cat <<EOF

%!PS

%

%

save

%

%

$border $border moveto

FreeBSD 使用手册

echo “Usage: ‘basename $0‘ <user> <host> <job>” 1>&2

# Save these, mostly for readability in the PostScript, below.

# Send the PostScript code to stdout.

% Make sure we do not interfere with user's job that will follow

% Make a thick, unpleasant border around the edge of the paper.

$page_width $border 2 mul sub 0 rlineto

0 $page_height $border 2 mul sub rlineto

第44 页%

%

($user) show

%

%

/y 200 def

[ (Job:) (Host:) (Date:) ] {

forall

/y 200 def

[ ($job) ($host) ($date) ] {

FreeBSD 使用手册

currentscreen 3 -1 roll pop 100 3 1 roll setscreen

$border 2 mul $page_width sub 0 rlineto closepath

0.8 setgray 10 setlinewidth stroke 0 setgray

% Display user's login name, nice and large and prominent

/Helvetica-Bold findfont 64 scalefont setfont

$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto

% Now show the boring particulars

/Helvetica findfont 14 scalefont setfont

200 y moveto show /y y 18 sub def }

/Helvetica-Bold findfont 14 scalefont setfont

270 y moveto show /y y 18 sub def

} forall

%

% That is it

%

restore

第45 页showpage

EOF

现在,每个转换用过滤程序以及文字过滤程序可以在打印前先呼叫这个script 打印出

FreeBSD 使用手册

header page 然后再打印工作的内容。我们修改之前提过的DVI 转换用过滤程序使它可以打

印header page:

#!/bin/sh

#

# psdf - DVI to PostScript printer filter

# Installed in /usr/local/libexec/psdf

#

# Invoked by lpd when user runs lpr -d

#

orig_args=”$@”

fail() {

echo “$@” 1>&2

exit 2

}

while getopts “x:y:n:h:” option; do

case $option in

x|y) ;; # Ignore

n) login=$OPTARG ;;

h) host=$OPTARG ;;

*) echo “LPD started ‘basename $0‘ wrong.” 1>&2

exit 2

;;

esac

done

[ “$login” ] || fail “No login name”

第46 页FreeBSD 使用手册

[ “$host” ] || fail “No host name”

( /usr/local/libexec/make-ps-header $login $host “DVI File”

/usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args

注意这个过滤程序如何从参数中取出使用者名称及机器名称。虽然这个过滤程序使用了

一些不同的参数(请阅读过滤程序的运作方式这一节),不过同样的技巧也可以应用在其它

不同的过滤程序上。

不过就如我们前面所提到的,这个方式虽然很简单,但是却让lpr 命令无法“不打印

header page”(即-h 参数无效)。如果使用者想要少花些钱(如果打印header pages 要收费的

话),那么它们将无法做到。因为每个过滤程序都会为每个工作打印header page。

如果要允许使用者可以自己选择是否打印header pager,你得使用统计打印Header

Pages 这里介绍的技巧:写一个可以判断由LPD 产生的header page 的输出用过滤程序,并

由它输出PostScript 打印机可以处理的资料。这么一来,如果使用者以lpr -h 送出工作,

LPD 将不会产生header page,且你的输出用过滤程序也不会。否则,你的输出用过滤程序

将要根据LPD 送出的资料然后以适当PostScript 码将header page 送给打印机处理。

如果你的PostScript 打印机是接在串行端口上,那么你可以使用lprps 里提供的输出用

过滤程序,psof,这个过滤程序会做上述的动作。注意, psof 这个过滤程序将不会为header

pages 计费。

11.4.3 网络打印

FreeBSD 支持网络打印:将工作送给远程的打印机处理。网络打印有两大类型:

1. 访问远程机器所安装的打印机。你在某一台机器上的串口或并口上接了一台打印机,然

后你设置LPD 使该台打印机可以接收网络上其它机器来使用。安装远程机器上的打印

机这一节将告诉你如何设置。

2. 使用直接接在网络上的打印机。这种打印机通常有一个额外的网络接口,以及(或是取

代掉原本的)传统的串口或并口。这种打印机可能有下列的工作方式:

a) 它可能可以使用LPD 通讯协议直接接收从其它机器送来的工作。在这种情况下,

就和一般的机器上面运行LPD 没什么不同。只要照着安装远程机器上的打印机

这一节里的设置即可。

第47 页FreeBSD 使用手册

b) 它可能支持网络数据传输接口。这种情况下,你得将打印机“连接”到网络上的某

一台机器上,然后让该机器负责接收工作以及在打印机间传送资料。请阅读使用

网络数据传输接口的打印机里关于这类打印机安装的建议。

11.4.3.1 安装远程机器上的打印机

LPD spooling 系统内建有将工作送给网络上其它执行LPD (或与LPD 兼容)程序的机器

打印的功能。这个功能让你可以将打印机安装在一台机器上,并让网络上其它的机器可以使

用。这功能也可以直接配合支持LPD 通讯协议的网络接口打印机使用。

要使用远程打印,首先,我们要先按照简单的打印机设置在打印机服务器上将打印机设

置好。然后也参考高级打印机设置设置你所需要的参数,确定你的打印机可以和LPD 配合

运作。最后要确定本机有在LPD 的已授权使用远程机器列表里(请阅读限制来自远程打印机

的工作这一节)。

如果你是使用兼容于LPD 通讯协议的网络接口打印机,那么下面讨论的打印机服务器

就是这台打印机,而打印机名称则是你为打印机设置的名称。请查阅随打印机或网络接口附

的手册来设置。

在其它要访问这些网络打印机的机器上,它们的/etc/printcap 设置文件得这么设置:

1. 为你的网络打印机取个名字,为了简单起见,你可能会把打印机的名称及别名和打

印机服务器取一样的名字。

2. 明确地将lp 关键词设置为空(:lp=:)。

3. 建立一个spooling 目录同时将其位置以sd 关键词指定。LPD 在将工作送给打印机服

务器之前,会将这此工作放在这个目录下。

4. 将打印机服务器的名称以rm 关键词指定。

5. 将打印机服务器上的打印机名称用rp 关键词指定。

这些就足够了,你不需要在/etc/printcap 文件里将转换用的过滤程序列出,或是指定

纸张的大小。

下面是一个例子。rose 这台机器有两台打印机, 分别为bamboo 及rattan。我们要让

orchid 这台机器上的使用者可以使用这两台打印机。下面是orchid 这台机器上的

/etc/printcap 设置文件(回想要求打印Header Pages 这一节),这个文件里面已经设置teak

这台打印机了,我们将要再加入两台连接在rose 这台机器上的网络打印机:

第48 页#

#

#

#

:if=/usr/local/libexec/ifhp:\

:vf=/usr/local/libexec/vfhp:\

:of=/usr/local/libexec/ofhp:

#

#

#

#

FreeBSD 使用手册

# /etc/printcap for host orchid - added (remote) printers on rose

# teak is local; it is connected directly to orchid:

teak|hp|laserjet|Hewlett Pa

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有