“光栅”是特定格式还是通用术语(关于CUPS打印库)

Lan*_*ard 6 printing graphics image cups

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

我还不确定它raster.c到底做什么,但imagetoraster.c本质上是采用 PNG/JPEG/等。听起来像是“将其转换为光栅格式”。我不太明白这到底是什么意思。有些打印机是“PostScript打印机”,其他打印机是“光栅打印机”,但我不确定这个术语“光栅”是否意味着存在某种“打印机光栅格式”,例如PNG或JPG,或者它只是一个数组某种像素或其他东西。打印机似乎有某种标准格式,但称其为“光栅”似乎有点误导,因为光栅基本上是某种东西的任意像素表示(根据我的理解)。

希望人们能够澄清此 CUPS 过滤器/打印库中光栅的确切含义。我一直认为这实际上是某种 IANA 哑剧类型,但我不确定。

Kur*_*fle 3

初步说明:您引用的不是本机 CUPS API。它是OpenPrinting项目库的一部分。OpenPrinting 提供并维护了一组可以集成并对接到 CUPS 的过滤器,主要面向 Linux 用户,因为 Apple 不再直接支持该操作系统,而是将相应的 CUPS 代码部分移交给 Linux 基金会...


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

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

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

但是,如果打印机不支持 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
Run Code Online (Sandbox Code Playgroud)

为了完成这些转换,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
Run Code Online (Sandbox Code Playgroud)

您应该在Linux 上的/usr/lib/cups/filter/目录(或 macOS 上的/usr/libexec/cups/filter/ )中查看目录,以查看系统上所有已安装过滤器的列表。如果您可以访问 Linux 和 macOS,您会看到很多差异:

  • macOS:例如,在 macOS 上,您将看到cgpdftorasterApple 专有的过滤器,该过滤器未作为开源发布,并且在 Linux 上不可用。(它与 Apple 的核心图形库接口,无论如何,Linux 上都不使用该库。)这将转换为 CUPS 光栅格式。

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

    • URF 是一种(Apple 专有)光栅格式,所有启用 AirPrint 并经过认证的打印机都必须支持该格式。
    • PWG 是打印机工作组(PWG)指定的光栅格式。它与 URF 非常相似,并且每台经过IPP Everywhere认证的打印机都需要支持它。

     

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

  • Linux:例如,在 Linux 上(cups-filters安装了 OpenPrinting 的软件包)您将看到它{pdf,image,gs}toraster也转换为 CUPS 光栅格式。

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

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


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


CUPS 术语中的“光栅打印机”是指任何不使用 PDF 或 PostScript 的打印机。(严格来说,市场上也有可以使用微软 XPS/OXPS 打印格式的打印机,该格式也是基于矢量的。但这些打印机在 macOS 和 Linux 上均不受 CUPS 支持。供应商仅提供适用于 Windows 的驱动程序。)