【发布时间】:2012-11-02 00:36:15
【问题描述】:
我正在开发打印系统,需要向每个打印的文档添加任意文本(如作者、文档哈希、一些 sysvar 等)。我们使用 Java 打印服务 (javax.print) 作为打印客户端,使用 Cups 作为服务器。
Cups 有一些称为“过滤器”的文档后处理程序。
Filter - 是一个程序,将由 Cups 推出。 Cups pass 过滤了一些参数——其中的“工作属性”。
所以,我决定将自定义属性从 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...
我的属性:
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";
}
}
【问题讨论】:
-
您是否使用 MyAttr 正确实现 javax.print.attribute.Attribute ?我不确定它的解决方案,但文档建议你应该这样做。请参阅 java 文档:docs.oracle.com/javase/1.4.2/docs/api/javax/print/attribute/… 还发布您的类 MyAttr 的代码可能会有所帮助。
-
感谢关注。我认为 MyAttr 实施得当,在我的问题中添加了来源。
标签: java linux bash printing cups