私は印刷システムに取り組んでおり、印刷された各ドキュメントに任意のテキストを追加する必要があります (作成者、ドキュメント ハッシュ、いくつかの sysvar など)。Java 印刷サービス (javax.print) を印刷クライアントとして使用し、Cups をサーバーとして使用します。
Cups には、「フィルター」と呼ばれるドキュメントの後処理の手順がいくつかあります。
Filter - Cups によって起動されるプログラムです。カップパスは、いくつかのパラメーターをフィルター処理します - それらの中の「ジョブ属性」。
そこで、カスタム属性を Java から cups に渡し、属性をテキストとしてフィルター内のドキュメントに追加することにしました。すべてが例外なく機能し、ドキュメントは印刷されますが、フィルターで属性を取得できません。それらは Cups にさえ渡されません (パケット スニファで見ました)。
すでに getSupportedAttributeCategories() を使用して、サポートされている (プリンターで?) 属性のリストを確認しました。どうにかしてそのリストに追加する必要があるかもしれませんが、方法がわかりません。
私は「属性」に限定されていません。Java から Cups フィルターに任意のデータを渡す必要があるだけです。どうすればいいですか?
私のJavaコードは次のようなものです:
MyAttrSet attrs = new MyAttrSet();
attrs.add(new MyAttr(42));
attrs.add(new Copies(18));
PrintService service = PrintServiceLookup.lookupDefaultPrintService();
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(is, flavor, null);
DocPrintJob job = service.createPrintJob();
job.print(doc, attrs);
Filter は単純な bash スクリプトで、渡されたすべてのものを出力します。
#!/bin/bash
echo "All args:" > /tmp/f1.log
for var in "$@"
do
echo "$var, " >> /tmp/f1.log
done
/tmp/f1.log は次のようになります。
All args:
87,
oroboros,
Java Printing,
18, <- number of pages is passed! But not MyAttr
some useless crap like job uuid and else...
MyAttr:
class MyAttr extends IntegerSyntax implements PrintRequestAttribute {
protected MyAttr(int value) {
super(value);
}
public Class<? extends Attribute> getCategory() {
// TODO Auto-generated method stub
return MyAttr.class;
}
public String getName() {
// TODO Auto-generated method stub
return "somemycustop5";
}
}