CUPS (OpenSUSE) 应用在后端之前执行的自定义过滤器

CUPS (OpenSUSE) apply custom filter which is executed just before backend

我遇到了一个包含多个阶段的任务。一个阶段可以表述为 "catch every print job file before printing and save it in the specified place; print job file should contain information such as total pages for printing etc.".

据我了解,CUPS 实现了可扩展的管道,其中包含过滤器链、后端和其他部分。

在过滤器管道中,通常 PSTOPS 或 PDFTOPDF 过滤器插入我想要获取的特定打印作业信息。

我想我必须在 PSTOPS/PDFTOPDF 和备份打印作业之后立即实施自定义过滤器。为了实现它,我将添加

application/vnd.cups-postscript application/vnd.cups-postscript 0 customFIlterName application/vnd.cups-pdf application/vnd.cups-pdf 0 customFilterName

mime.convs(或local.convs)。

我的问题来了:

  1. 我的自定义过滤器会被调用吗? (它们的成本为零,但我不确定 CUPS 是否会将此步骤添加到管道中)
  2. 我应该如何处理未命中 PSTOPS|PDFTOPDF 过滤器的队列?
  3. 早晚,管道到达直接与打印机通信的后端部分。我应该尝试在此阶段进行备份而不是过滤阶段吗?如果可以,如何实现?

非常感谢您的回复!

我想分享我实现的内容,以防它对其他人有用。

设备功能和一些其他信息包含在相关的 ppd 文件中 (etc/cups/ppd/DEVICE_NAME.ppd)。

Ppd 文件包含类似“*cupsFilter: IN_MIME OUT_MIME FILTER_NAME”的字符串。 此字符串指示应在后端之前最后调用哪个过滤器。 字符串可能会被编辑,例如 IN_MIME 变成 CUSTOM_IN_MIME 应该声明到相关的 cups mime 描述文件中。然后,零成本的自定义过滤器可能被声明为 IN_MIME CUSTOM_IN_MIME。

那么它是唯一理解 CUSTOM_IN_MIME 的过滤器,因此必须调用(实际上,CUSTOM_IN_MIME 与 IN_MIME 相同,引入只是为了强制使用自定义过滤器).

在CUSTOM_FILTER中我们可以实现任何我们想要的。这是注入 CUPS 的非常强大和通用的方法。

希望对大家有所帮助。