将数据从java传递到cups过滤器



我正在开发打印系统,需要向每个打印的文档添加任意文本(如作者、文档哈希、一些sysvars等)。我们使用Java打印服务(javax.print)作为打印客户端,使用Cups作为服务器。

Cups有一些文档后处理过程,称为"过滤器"。

过滤器-是一个程序,将由Cups启动。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";
}
}

您可以使用cups4j

Map attributes = new HashMap();
attributes.put("job-attributes", "print-quality:enum:3#media:keyword:iso_a5_148x210mm");
printJob.setAttributes(attributes);

请参阅以下关于CUPS在Linux上的升级如何破坏Java库和CUPS库的文章:http://www.cups.org/articles.php?L433+TFAQ+Q

现在,既然你可以打印,我想这不是问题。但我不确定MyAttrSet是什么,它应该是HashPrintRequestAttributeSet

尝试:

PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(2));

看看这个属性是否被读入,然后尝试将你的添加到这样的集合中,它是否有效。您可能想尝试实现其他属性:

Sides属性如下所示:

public class Sides
extends EnumSyntax
implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
{
public final Object getCategory()
{
return Sides.class;
}
...
}

类似副本:

public final class Copies
extends IntegerSyntax
implements PrintRequestAttribute, PrintJobAttribute

也许可以尝试添加PrintJobAttribute 的附加实现

相关内容

  • 没有找到相关文章

最新更新