21. 打印机

[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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容