原始队列的 CUPS 过滤器

原始队列的 CUPS 过滤器

我在弄清楚如何为 CUPS 中的原始队列添加过滤器时遇到问题 - 如果可能的话。

基本上,我需要做的是将 TIFF 转换为 PS,然后再将其发送到原始队列。打印机没有内置 TIFF 支持,因此输出是垃圾。

我需要将打印机设置保留为原始队列,并且无法为同一台打印机添加第二个打印队列以进行过滤。

是否有办法捕获 TIFF 文件(最好用于单个打印机)并将其转换为 PS,然后再发送原始文件?

我会在原始应用程序的 mime.convs 中执行此操作吗?

答案1

我已经找到了解决这个问题的方法。基本上,我正在创建一个带有自定义后端的新打印机,它允许我在再次发送数据之前操纵传入的数据。因此,我有一台打印机充当包装器,它接收数据,转换图像,然后将其发送到实际的打印机。

为了实现这一点,有一个 openSUSE RPM 包提供了CUPS 管道后端可以与 CentOS 一起使用。该后端的使用方式类似于命令行管道。

我下载了上面的 RPM 并提取了管道脚本。该脚本被复制/usr/lib/cups/backend/pipe并可执行。

然后我编写了一个小脚本,它将获取传递给它的打印信息,包括来自打印机 URI 的打印机选项。如果需要,此脚本会执行图像转换(对于此任务 TIFF 到 PDF),然后将其发送到实际打印机。

#!/bin/bash

FILE=${PIPE_BACKEND_ARGV6}

MIME_TYPE=$(file --mime-type "${FILE}" | awk '{print $2}')

if [[ $MIME_TYPE == *tiff ]]
  then
    tiff2pdf -o /tmp/printConv-$$.pdf "$FILE"

    FILE=/tmp/printConv-$$.pdf

    CONV=1

fi

lpr -P "$1" "${FILE}"

if [[ $CONV -eq 1 ]] 
 then
   rm "${FILE}"

fi

然后,我使用以下 URI 语法设置“包装器”打印机:

pipe:/path/to/cups-wrapper-script?actualPrinterName

这里使用管道后端。它/path/to/cups-wrapper-script使用参数调用脚本 at actualPrinterName,该参数用于告诉脚本将作业发送到哪个实际打印机。

相关内容