gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:56:46 24 4
gpt4 key购买 nike

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

Cups 有一些称为“过滤器”的文档后处理程序。

Filter - 是一个程序,将由 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...

我的属性:

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);

请参阅以下文章了解 Linux 上的 CUPS 升级如何破坏 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 的附加实现

关于java - 将数据从 java 传递到 cups 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13363170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com