
我在弄清楚如何為 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
,該參數用於告訴腳本將作業傳送到哪個實際印表機。