我看到了与CUPS库相关的两个文件:
- OpenPrinting/cups-filters/bob/master/filter/imagetoraster.c
- OpenPrinting/cups-filters/bob/master/cupsfilters/rraster.c
我还不确定raster.c
到底做了什么,但imagetoraster.c
本质上采用了PNG/JPEG/等。并"将其转换为光栅格式",听起来像是这样。我不太明白这到底是什么意思。有些打印机是"PostScript打印机",有些是"光栅打印机",但我不确定"光栅"一词是否意味着存在某种"打印机光栅格式",如PNG或JPG,或者它只是某种像素阵列,或者其他什么。打印机似乎有某种标准格式,但称其为"光栅"似乎有点误导,因为光栅基本上是某种东西的任意像素表示(根据我的理解)。
希望人们能够澄清这个CUPS过滤器/打印库中光栅的确切含义。我一直认为这实际上是某种IANA哑剧类型,但我不确定。
初步说明:您引用的不是本机CUPS API。它是OpenPrinting项目库的一部分。OpenPrinting提供并维护了一组过滤器,这些过滤器可以集成并对接到CUPS中,主要针对Linux用户,因为苹果不再直接支持该操作系统,而是将各自的CUPS代码部分移交给Linux基金会
在CUPS和您提到的两个库源文件的上下文中,"光栅"是此处定义的特定光栅格式(它实际上在IANA注册为mime类型'application/vnd.cups-raster'
):
- https://www.cups.org/doc/spec-raster.html
所以,这既不是TIFF,也不是PNG,也不是JPEG。CUPS光栅是CUPS特有的图像格式,开发用于CUPS。
当需要将可打印文档格式(如PostScript、PDF、TIFF、JPEG、PNG、Text等)转换为打印机可以使用的格式时,这种格式在某些类型的打印作业中起着中介作用(如果你今天买一台打印机,它可以直接使用PDF的几率约为95%,因此不需要真正的转换!)
但是,如果打印机未启用PDF(像许多仅限HP PCL的设备一样,旧型号也是如此),则需要根据打印机的喜好转换可打印格式。您可以看到CUPS光栅在可能的文件格式转换链中的"中介"作用,CUPS可以为每个打印作业自动设置这些转换链:
## FILE FORMAT CONVERSIONS
PDF -> CUPS-raster -> PCL6 # PCL6-consuming printer
PDF -> CUPS-raster -> PCL3 # PCL3-consuming printer
PDF -> CUPS-raster -> ESC/P # EPSON's ESC/P consuming printer
为了完成这些转换,CUPS采用了一系列"过滤器",从一种格式转换为另一种格式。它为每个打印作业自动构建这些链,这取决于打印输入和(目标打印机)输出所需的当前需求:
## CUPS FILTERING CHAIN EXAMPLES
(PDF input) -> pdftoraster -> rastertohp # PCL6-consuming printer
(PostScript input) -> gstoraster -> rastertohp # PCL3-consuming printer
(TIFF input) -> imagetoraster -> rastertoescpx # EPSON's ESC/P consuming printer
(PNG input) -> imagetoraster -> rastertopwg # any IPP-Everywhere printer
(JPEG input) -> imagetoraster -> rastertopdf # any PDF-enabled printer
(PDF input) -> pdftoraster -> rastertoqpdf # some Samsung printers consuming SPLIX
您应该在Linux上的目录/usr/lib/cups/filter/(或macOS上的/usr/libexec/cups/filter/)中查找,以查看系统上所有已安装过滤器的列表。如果你同时使用Linux和macOS,你会看到很多不同之处:
macOS:例如,在macOS上,您会看到
cgpdftoraster
过滤器,它是苹果专有的,未作为开源发布,在Linux上不可用。(它与Apple的核心图形库接口,该库无论如何都不会在Linux上使用。)这将转换为CUPS光栅格式。然后(至少)还有两个滤波器接管生成的CUPS光栅并进一步转换:
rastertopwg
和rastertourf
:- URF是一种(苹果公司专有)光栅格式,所有启用AirPrint并经过认证的打印机都必须支持该格式
- PWG是打印机工作组(PWG)指定的光栅格式。它与URF非常相似,每个IPP Everywhere认证的打印机都需要支持它
;
如果您安装了任何供应商的打印机驱动程序,则系统上可能会有其他rasteroXYZ筛选器。
Linux:例如,在Linux上(安装了OpenPrinting的
cups-filters
软件包),您将看到也转换为CUPS光栅格式的{pdf,image,gs}toraster
。两个过滤器
rasterto{pdf,pwg}
将CUPS光栅转换为PDF和PWG光栅。同样:如果您安装了任何供应商的专有打印机驱动程序,或者安装了其他打印机驱动程序包,如HPLIP、Gutenprint、printer-driver-foo2zjs、打印机驱动程序splix或打印机驱动程序brlaser,则您的系统上可能会有额外的rasteroXYZ过滤器(程序包名称适用于Debian)。
要查看哪个特定的输入文件格式mime类型可以由哪个过滤器转换为哪个特定的输出mime类型,您应该查看并读取系统的所有/usr/share/cups/mime/*.convs文件。
CUPS术语中的"光栅打印机"是指不使用PDF或PostScript的任何打印机(严格来说,市场上也有打印机可以使用微软的XPS/OXPS打印格式,该格式也是基于矢量的。但CUPS不支持这些格式,无论是在macOS上还是在Linux上。供应商只为Windows提供驱动程序。)