CUPS 命令行打印图像文件的限制

CUPS 命令行打印图像文件的限制

我设置了默认打印机:lpoptions -d HP_ENVY_5530_series。我可以打印一些文本:

echo HELLO > h.txt
lp h.txt

CUPS 直接识别许多不同类型的文件,包括文本、PostScript、PDF 和图像文件。

我可以打印便携式网络图形: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 的过滤器。

相关内容