原始佇列的 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,該參數用於告訴腳本將作業傳送到哪個實際印表機。

相關內容