[TOC]
着手用于打印文件和控制打印选项的命令行工具。
前提条件:一台正确配置的打印机。
PostScript 是专为印刷各类图形和图像设计的完整的编程语言,它内建支持 35 种标准的高质量字体,在工作是还能够接受其他的字体定义。
在 Linux 下打印
当前 Linux 系统采用两套软件配合显示和管理打印。
- 第一,CUPS(Common Unix Printing System,一般 Unix 打印系统),用于提供打印驱动和打印任务管理;
- 第二,Ghostscript,一种 PostScript 解析器,作为 RIP 使用。
pr 转换需要打印的文本文件
在打印的历史上,基于字符的打印机曾经用过等宽字体,致使每页只能打印固定的行数和字符数,
而 pr 命令则能够根据不同的页眉和页边距排列文本使其适应指定的纸张。
| 常用 pr 选项 | 描述 |
|---|---|
| +first[:last] | 输出从 first 到 last(默认为最后)范围内的页面。 |
| -columns | 根据 columns 指定的列数排版页面内容。 |
| -a | 默认多列输出为垂直,用 -a (across) 可使其水平输出。 |
| -d | 双空格输出。 |
| -D format | 用 format 指定的格式修改页眉中显示的日期,日期命令中 format 字符串的描述详见参考手册。 |
| -f | 改用换页替换默认的回车来分割页面。 |
| -h header | 在页眉中部用 header 参数替换打印文件的名字。 |
| -l length | 设置页长为 length,默认为 66 行(每英寸 6 行的美国信纸)。 |
| -n | 输出行号。 |
| -o offset | 创建一个宽 offset 字符的左页边。 |
| -w width | 设置页宽为 width,默认为 72 字符。 |
# 列出目录 /usr/bin 并用 pr 将其格式化为 3 列输出的标题页
$ ls /usr/bin | pr -3 -w 65 | head
2019-02-01 01:29 Page 1
[ byobu-launcher-instal col3
2to3-3.5 byobu-launcher-uninst col4
aa-enabled byobu-layout col5
acpi_listen byobu-prompt col6
add-apt-repository byobu-quiet col7
将打印任务送至打印机
CUPS 打印体系支持两种曾用于类 Unix 系统的打印方式。
- 一种,叫 Berkeley 或 LPD(用于 Unix 的 Berkeley 软件发行版),使用
lpr程序; - 另一种,叫 SysV(源自 System V 版本的 Unix),使用
lp程序。
这两个程序的功能大致相同。具体使用哪个完全根据个人喜好。
lpr 打印文件(Berkeley 风格)
lpr 程序可以用来把文件传送给打印机。由于它能接收标准输入,所以能用管道来协同工作。
# 将打印任务发送到默认打印机
$ ls /usr/bin | pr -3 | lpr
# 指定打印机,printer_name 表示打印机名称
$ lpr -P printer_name
# 查看系统已知的打印机列表
$ lpstat -a
| 常用 lpr 选项 | 描述 |
|---|---|
| -# number | 设定打印份数为 number。 |
| -p | 使每页页眉标题中带有日期、时间、工作名称和页码。这种所谓的 “美化打印” 选项可用于打印文本文件。 |
| -P printer | 指定输出打印机的名称。未指定则使用系统默认打印机。 |
| -r | 打印后删除文件。对程序产生的临时打印文件较为有用。 |
💡💡💡
许多 Linux 发行版允许你定义一个输出 PDF 文件但不执行实体打印的“打印机”,这可以用来很方便的检验你的打印命令。看看你的打印机配置程序是否支持这项配置。在某些发行版中,你可能要自己安装额外的软件包(如 cups-pdf)来使用这项功能。
lp 打印文件(System V)
和 lpr 一样,lp 可以接收文件或标准输入为打印内容。与 lpr 不同的是 lp 支持不同的选项(略为复杂)。
| 常用 lp 选项 | 描述 |
|---|---|
| -d printer | 设定目标(打印机)为 printer。若 d 选项未指定,则使用系统默认打印机。 |
| -n number | 设定的打印份数为 number。 |
| -o landscape | 设置输出为横向。 |
| -o fitplot | 缩放文件以适应页面。打印图像时较为有用,如 JPEG 文件。 |
| -o scaling=number | 缩放文件至 number。100 表示填满页面,小于 100 表示缩小,大于 100 则会打印在多页上。 |
| -o cpi=number | 设定输出为 number 字符每英寸,默认为 10。 |
| -o lpi=number | 设定输出为 number 行每英寸,默认为 6。 |
| -o page-bottom=points | 设置页边距,单位为点,一种印刷上的单位。一英寸 =72 点。 |
| -o page-left=points | 同上 |
| -o page-right=points | 同上 |
| -o page-top=points | 同上 |
| -P pages | 指定打印的页面。pages 可以是逗号分隔的列表或范围 — 例如 1,3,5,7-10。 |
# 设置 12 CPI、8 LPI 和一个半英寸的左边距。
$ ls /usr/bin | pr -4 -w 90 -l 88 | lp -o page-left=36 -o cpi=12 -o lpi=8
a2ps 为 PostScript 打印机格式化文件
a2ps 程序名字的本意为 ASCII to PostScript,它是用来为 PostScript 打印机准备要打印的文本文件的。
多年后,程序的功能得到了提升,名字的含义也变成了 Anything to PostScript。尽管名为格式转换程序,但它实际的功能却是打印。它的默认输出不是标准输出,而是系统的默认打印机。
# 用程序在桌面上创建一个 PostScript 文件
$ ls /usr/bin | pr -3 -t | a2ps -o ~/Desktop/ls.ps -L 66
[stdin (plain): 11 pages on 6 sheets]
[Total: 11 pages on 6 sheets] saved into the file `/home/me/Desktop/ls.ps'
相关参考
lpstat 显示打印机状态信息
lpstat 程序可用于确定系统中打印机的名字和有效性。
# 查看打印机状态
$ lpstat -a
# 查看打印系统具体的配置信息
$ lpstat -s
| 常用 lpstat 选项 | 描述 |
|---|---|
| -a [printer...] | 显示 printer 打印机的队列。这里显示的状态是打印机队列承受任务的能力,而不是实体打印机的状态。若未指定打印机,则显示所有打印队列。 |
| -d | 显示系统默认打印机的名称。 |
| -p [printer...] | 显示 printer 指定的打印机的状态。若未指定打印机,则显示所有打印机状态。 |
| -r | 显示打印系统的状态。 |
| -s | 显示汇总状态。 |
| -t | 显示完整状态报告。 |
lpq 显示打印机队列状态
lpq 程序可以查看打印机队列的状态,从中我们可以看到队列的状态和所包含的打印任务。
$ lpq
printer is ready and printing
Rank Owner Job File(s) Total Size
active me 603 (stdin) 1024 bytes
取消打印任务
CUPS 提供两个程序来从打印队列中终止并移除打印任务。
- 一个是 Berkeley 风格的(
lprm); - 另一个是 System V 的(
cancel);
在支持的选项上两者有较小的区别但是功能却几乎相同。
lprm 取消打印任务
cancel 取消打印任务(System V)
# 1.查看打印机队列状态
$ lpq
printer is ready and printing
Rank Owner Job File(s) Total Size
active me 603 (stdin) 1024 bytes
# 2.取消打印任务
$ cancel 603