可能であれば、CUPSの生キューにフィルタを追加する方法を見つけることに問題があります。
基本的に私がすべきことは、TIFFを元のキューに送信する前にPSに変換することです。プリンタにはTIFF対応機能が内蔵されていないため、出力はゴミです。
プリンタ設定を元のキューに維持する必要があり、フィルタリングのために同じプリンタに2番目の印刷キューを追加することはできません。
元のファイルを送信する前に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
スクリプトを呼び出します。actualPrinterName