我在弄清楚如何为 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
,该参数用于告诉脚本将作业发送到哪个实际打印机。