我记得在Xcode 5上,模拟器在文件菜单中有一个名为"打开打印机模拟器"的按钮,但现在它已经消失了.
如何在模拟器上测试打印机?
Java中有没有办法打印到特定的IPP打印机?我发现的所有示例代码和教程都集中在如何使用以下内容打印特定类型的文档:
DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor, aset);
if (pservices.length > 0) {
DocPrintJob pj = pservices[0].createPrintJob();
try {
FileInputStream fis = new FileInputStream("test.ps");
Doc doc = new SimpleDoc(fis, flavor, null);
pj.print(doc, aset);
} catch (FileNotFoundException fe) {
} catch (PrintException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
此代码段只是打印到找到的能够打印文档的第一台打印机.在我的情况下,我想通过其URI查找打印机,但PrintServiceLookup似乎不支持这一点.我尝试过使用a PrintServiceAttributeSet而不是PrintRequestAttributeSet添加PrinterURI属性,但这并没有返回任何打印机.我怀疑查找服务正在寻找可以更改其目标URI的打印机,而不是查找具有该URI的打印机.
作为最后的手段,我想到只是枚举所PrintService返回的所有s lookupPrintServices,但URI不在任何属性中.打印机名称在那里,但我需要URI.
对于后台,我的webapp需要根据当前用户将条形码打印到特定的打印机.每个用户都与一个打印机URI相关联,该URI指向CUPS服务器上的打印机.打印机URI是我唯一的信息,我不能限制打印机名称以匹配URI或URI的子字符串.
编辑:为了澄清一点,我不需要渲染数据,我只需要将blob复制到给定的打印机.我无法弄清楚的部分是如何通过其IPP URI识别打印机.
我希望能够在网络打印机物理完成打印页面(和/或整个作业)时收到通知。这将用于我正在编写的用于通过网络进行打印管理的应用程序中,并且由于用户按每页收费,并且在页面实际完成之前费用不应下降。
我不确定这是否需要编写驱动程序、某种插件或客户端应用程序是否可以。我对我的平台很灵活,因为我的客户端还没有编写,所以我想听听任何适用于 Windows 或 Linux 的任何编程语言/级别的解决方案。
我知道假脱机程序和打印机之间存在差异。我正在尝试检查当页面或作业物理完成时,打印机可能会通过 IPP 通知机器的级别。
我目前正在研究 Java,使用jspi或cups4j包在 IPP 属性job-impressions-completed 更改时获取通知,或者轮询它。我正在使用 CUPS IPP 接口连接到本地打印机。运行一个简单的测试器(HelloPrint.java附在下面;或CupsTest.java包含在 cups4j 中),我没有收到任何job-impressions-completed属性更改,也没有在我轮询时列出作业的属性。
所以这里是问题:
job-impressions-completed属性可能未更新,特别是因为它充当真实打印机的假脱机程序。假设真正的打印机将通知或列出此属性,这是特定于打印机的还是必须任何支持 IPP 的打印机具有此属性可用和更新?系统信息:Ubuntu 11.10,CUPS 1.5.0,打印机是 Brother HL-2240D(此处提供 PPD)
注意:HL-2240D不是我将用于最终项目的打印机(具体来说,它不支持 IPP);我打算使用 HP HL4250DN 或三星 3741ND 或类似产品。
这是一个使用javax.print包和 jspi的示例应用程序:
你好打印
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Date;
import javax.print.*;
import javax.print.attribute.*;
import …Run Code Online (Sandbox Code Playgroud)