「私はそのように対処しました: [...] プリンターの PPD に *cupsFilter を追加する」
*cupsFilter:
印刷キューの PPD の -entry は、ジョブ データをそれぞれのキューのバックエンドに渡す前に、そのキューのフィルタリング チェーンの最後のインスタンスとして実行するフィルターを決定することに注意してください(最終的な宛先プリンターまたはファイルに送信されます)。 .
つまり、PPD の背後にどのような具体的なセットアップが隠されているかによって異なります*cupsFilter:
。それぞれのデータを「生の」ジョブとして処理する*cupsFilter:
ように CUPS に指示すると、アカウンティング情報を作成するフィルターが表示されない可能性があります。ジョブ データがフィルター処理されずに印刷デバイスに送信される場合があります。その場合、CUPS の唯一の選択肢は、ファイルにコピー数として書き込むことです。1
page_log
CUPS フィルタリングをいじる場合 (何らかの方法で: 独自のフィルターまたはラッパー スクリプトを記述したり*cupsFilter:
、PPD に行を記述したり...) page_log
、.
「フィルターを連鎖させる方法はありますか?」
もちろんあります。
CUPS フィルターは、引数の数と、それらが呼び出される正確な順序について非常にうるさいです。端末で手動で引数なしでそれらの1つを呼び出すことにより、どちらの方向にあるかがわかります。Mac OSX の例を次に示します。
kp@mbp:> /usr/libexec/cups/filter/pstops
Usage: /usr/libexec/cups/filter.orig/pstops job-id user title copies options [file]
つまり、次のとおりです。
- 引数番号
0
: フィルタ自体のパス+名前
- 引数番号
1
: CUPS ジョブ ID
- 引数番号
2
:CUPSユーザー名
- 引数番号
3
: 職名
- 引数番号
4
: 要求部数
- 引数番号
5
: このジョブの印刷オプション。フィルターは、理解できるオプションのみを適用します!
- 引数番号
6
: 処理するファイル。オプションの引数。欠落している場合は、「プロセス<stdin>
」を意味します。
CUPS フィルタは常に に出力を配信し<stdout>
、 から入力を取得できる必要があります<stdin>
。
フィルタを手動またはスクリプトで呼び出して実行すると、上記の引数の一部が空になるか、ダミーの値を持つ場合があります。空の場合は、次のように空の二重引用符を使用します: ""
.
6 番目の引数 (入力ファイル名) はオプションです。欠落している場合、フィルタは からの入力を期待する必要があります<stdin>
。
したがって、独自の CUPS フィルターを作成できます。2 つの異なるタイプがあります。
- CUPS フィルターを最初から作成するか。
- または、1 つの元の CUPS フィルター (または CUPS フィルターのチェーン) を実行して、CUPS フィルターをラッパーとして記述します。
いずれにせよ、フィルター呼び出し規則は、引数の数とコマンド ラインでの出現順序に関する上記の規則に従わなければなりません。
また、次の点にも注意してください。CUPSが に出力するフィルタを実行すると<stderr>
、この出力が CUPS ログ ファイルにリダイレクトされます。したがって、独自の CUPS フィルターを作成すると、 に何が入るかを制御することで、CUPS のログに何が残るかを制御できます<stderr>
。CUPS ログに表示したくない場合は、 にリダイレクトし/dev/null
ます。
ターミナルでフィルターを手動で実行すると、出力<stderr>
はもちろんそのターミナルに表示されます。
したがって、Mac 上の PDF ファイルを手動で呼び出された CUPS フィルター チェーンに手動でフィードするには、次のようにします。
in=a-one-page-pdf-file.pdf
/usr/libexec/cups/filter/cgpdftops 1 kp "testing filter-chain" "1" "" ${in} \
| /usr/libexec/cups/filter/pstops 1 kp "testing filter-chain" "1" "" \
| /usr/libexec/cups/filter/pstopdffilter 1 kp "testing filter-chain" "1" "" \
| /usr/libexec/cups/filter/cgpdftoraster 1 kp "testing filter-chain" "1" "" \
| /usr/libexec/cups/filter/rastertotiff 1 kp "testing filter-chain" "1" "" \
| /opt/local/bin/convert - -mattecolor red -scale 25% -frame 1x1 output.png
(この特定のフィルタリング チェーンがあまり意味をなさないとは言わないでください。私は知っています。これはデモ目的のみです。しかし、機能します。)
このコマンドは PDF を処理し、最初に 5 つの CUPS フィルターのフィルター チェーンを呼び出します。次に、最後のフィルターとして ImageMagickconvert
コマンドを呼び出します。このコマンドは、ページの周りのフレームとして赤い細い線を持つ PNG 画像を作成します。
次のように、他にもたくさんあります。
- PPD ファイルを読み取って解釈する方法と、コマンド ラインで読み取り、詳細が PPD ファイルで指定されているジョブ オプションを適用する方法をフィルタするようになりました。環境変数から使用する PPD を取得します
PPD
。
- フィルターが吐き出すメッセージ行の前に
<stderr>
キーワードEMERG:
, ALERT:
, CRIT:
, ERROR:
, WARN:
,NOTICE:
を付けると、 cupsd.confのそれぞれの設定 (またはより高い設定)INFO:
がアクティブなDEBUG:
場合にのみ、これらのそれぞれの行がログに表示されます: , , 、、、または。LogLevel
alert
crit
error
warn
notice
info
debug
でも、とりあえず置いておきます…。