生のキューのCUPSフィルター

生のキューのCUPSフィルター

CUPS の raw キューにフィルターを追加する方法がわかりません (可能であれば)。

基本的に、必要なのは、TIFF を PS に変換してから、raw キューに送信することです。プリンターには TIFF サポートが組み込まれていないため、出力はジャンクになります。

プリンターの設定を raw キューとして保持する必要があり、フィルタリングのために同じプリンターに 2 番目の印刷キューを追加することはできません。

TIFF ファイル (できれば単一のプリンター用) をキャプチャし、それを PS に変換してから RAW で送信する方法はありますか?

これは、生のアプリケーションの mime.convs で行うべきことでしょうか?

答え1

これに対する解決策を見つけました。基本的に、カスタム バックエンドを備えた新しいプリンターを作成し、受信データを操作してから再度送信できるようにします。つまり、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ここでは、パイプ バックエンドが使用されています。引数 でスクリプトを呼び出します。引数actualPrinterNameは、ジョブを送信する実際のプリンタをスクリプトに指示するために使用されます。

関連情報