"raster" 是特定格式还是通用术语(关于CUPS打印库)

Is "raster" is a specific format or a general term (regarding CUPS printing library)

我看过CUPS库相关的,这两个文件:

我还不确定 raster.c 到底做了什么,但是 imagetoraster.c 基本上需要 PNG/JPEG/etc。 "converts it to raster format" 听起来像。我不太明白这到底是什么意思。有些打印机是 "PostScript printers",有些是 "Raster printers",但我不确定这个术语 "raster" 是否意味着有某种 "Printer Raster Format" 像 PNG 或 JPG,或者它是否是只是某种像素的数组,或其他东西。打印机似乎有某种标准格式,但称它为 "raster" 似乎有点误导,因为光栅基本上是某种东西的任意像素表示(根据我的理解)。

希望有人能阐明这个 CUPS 过滤器/打印库中光栅的确切含义。我一直认为它实际上是某种 IANA mime 类型,但我不确定。

初步说明:你引用的不是原生CUPSAPI。它是 OpenPrinting 项目库的一部分。 OpenPrinting 提供并维护一组可以集成和停靠到 CUPS 中的过滤器,主要针对 Linux 用户,因为 Apple 不再直接支持此 OS 而是将相应的 CUPS 代码部分移交给 Linux基金会...


在 CUPS 和您提到的两个库源文件的上下文中,"raster" 是此处定义的特定光栅格式(实际上它已在 IANA 注册为 mime 类型 'application/vnd.cups-raster'):

所以,这既不是 TIFF,也不是 PNG,也不是 JPEG。 CUPS-raster 是一种特定于 CUPS 的图像格式,开发用于与 CUPS 一起使用。

当需要将可打印文档格式(如 PostScript、PDF、TIFF、JPEG、PNG、文本等)转换为这样一种格式时,此格式对某些类型的打印作业起中介作用打印机可以消耗。 (如果您今天购买一台打印机,它可以直接使用 PDF 的可能性大约为 95%——因此不需要真正的转换!)

但是,如果打印机不支持 PDF(旧型号,如许多 HP PCL-only 设备),则您需要将可打印格式转换为打印机喜欢的格式。您可以看到 CUPS 光栅在 CUPS 可能为每个打印作业自动设置的可能的文件格式转换链中的 "intermediary" 作用:

  ## 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 采用了 "filters" 链,从一种格式转换为另一种格式。它为每个打印作业自动构建这些链,具体取决于打印输入发出的当前需求和(目标打印机)输出所需的信号:

  ## 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/ 目录(或 /usr/libexec/cups/filter/ 在 macOS) 上查看系统上所有已安装过滤器的列表。如果您可以同时访问 Linux 和 macOS,您会发现很多不同之处:

  • macOS: 例如,在 macOS 上你会看到 cgpdftoraster 过滤器是 Apple 专有的,未作为开源发布且在 Linux 上不可用。 (它正在与 Apple 的 Core Graphic 库连接,无论如何 Linux 都没有使用它。)这将转换为 CUPS 光栅格式。

    然后(至少)还有两个过滤器接管生成的 CUPS 栅格并进一步转换它:rastertopwgrastertourf:

    • URF 是一种(Apple 专有的)光栅格式,所有支持 AirPrint 且经过认证的打印机都必须支持。
    • PWG 是一种由 Printer Working Group (PWG). It is very similar to URF, and every IPP Everywhere 认证的打印机指定的光栅格式,需要支持它。

    如果您安装了任何供应商的打印机驱动程序,您的系统上可能会有额外的 rastertoXYZ 过滤器。

  • Linux: 例如,在 Linux 上(使用 OpenPrinting 的 cups-filters 包安装)你会看到 {pdf,image,gs}toraster 也转换为 CUPS 光栅格式。

    两个过滤器 rasterto{pdf,pwg} 将 CUPS 栅格转换为 PDF 和 PWG 栅格。

    再次声明:如果您安装了任何供应商的专有打印机驱动程序,或者如果您安装了其他打印机驱动程序包(例如 HPLIP),您的系统上可能会有其他 rastertoXYZ 过滤器, Gutenprint、printer-driver-foo2zjs、printer-driver-splix 或 printer-driver-brlaser(软件包名称适用于 Debian)。


要查看哪个特定的输入文件格式 mime 类型可以被哪个过滤器转换为哪个特定的输出 mime 类型,您应该查看并阅读您系统的所有 /usr/share/cups/mime/*.convs 个文件。


A "raster printer" 在 CUPS 的说法中是任何不使用 PDF 或 PostScript 的打印机。 (严格来说,市场上也有打印机可以使用微软的XPS/OXPS打印格式,也是基于矢量的。但是CUPS不支持这些,macOS和在 Linux 上。供应商仅为 Windows 提供驱动程序。)