我设置了默认打印机:lpoptions -d HP_ENVY_5530_series
。我可以打印一些文本:
echo HELLO > h.txt
lp h.txt
我可以打印便携式网络图形:lp Gnome2.26-printing-dialogue.png
。
可缩放矢量图形:lp Cups_simple.svg
- 打印为其内部文本内容,这没有多大用处。
扫描的 JPEG:lp 022.jpg
- 停止“无法打开图像文件进行打印!”。如果我用 ImageMagick- 将其转换为 PNG convert 022.jpg 022.png
,我就可以打印它lp 022.png
。
我想了解 CUPSlp
命令的这些限制。
答案1
CUPS 有一个过滤机制检测其输入的格式并将其转换为内置格式(PostScript 或光栅图像)。
CUPS 有一个文件名数据库神奇的数字(与命令使用的不同file
,但服务于类似的目的并按照类似的原理操作)。它使用该数据库在输入和内置格式之间构建转换链。
数据库位于/usr/share/cups/mime/
Arch Linux和Ubuntu上;其他发行版可能使用不同的路径。
如果 CUPS 无法识别输入格式,则根据过滤器的设置方式,它可能会采用文本或拒绝打印。在过滤器中查找仅包含application/octet-stream
(之后没有任何其他内容)的行;如果存在,则无法识别的输入将传递到打印机,否则它将因无法打印而被拒绝。
请注意,看起来像文本的输入(例如 SVG)将在任何合理的配置中打印为文本。如果您的安装没有定义 SVG 格式,则 SVG 将根据某种通用文本规则被识别并按原样打印。
有一些关于编写过滤器的很好的文档SuSE 维基。
您应该至少安装杯子过滤器包(以前由 Apple 提供,包含在 CUPS 本身中,现在由 OpenPrinting 维护)。 Arch 中有一个包。这包括适用于 JPEG 的过滤器,但不包括适用于 SVG 的过滤器。