因为要写一个java调用打印单据的功能,我用javax.print可以进行成功打印,但是无法获取打印状态,代码是这样的
public static void main(String[] argv) throws Exception {
File file = new File("a.jpg");
PDFPrint(file);
}
public static void PDFPrint(File file) throws PrintException {
if (file == null) {
System.err.println("缺少打印文件");
}
InputStream fis = null;
try {
// 设置打印格式,因为未确定类型,所以选择autosense
DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG;
// 打印参数
DocAttributeSet aset = new HashDocAttributeSet();
// aset.add(new Copies(1)); //份数
// aset.add(MediaSize.ISO.A4); //纸张
// aset.add(Finishings.STAPLE);//装订
// 定位默认的打印服务
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
fis = new FileInputStream(file); // 构造待打印的文件流
Doc doc = new SimpleDoc(fis, flavor, aset);
DocPrintJob job = defaultService.createPrintJob(); // 创建打印作业
job.addPrintJobListener(new PrintJobListener() {
@Override
public void printDataTransferCompleted(PrintJobEvent arg0) {
System.out.println("printDataTransferCompleted");
}
@Override
public void printJobCanceled(PrintJobEvent arg0) {
System.out.println("printJobCanceled");
}
@Override
public void printJobCompleted(PrintJobEvent arg0) {
System.out.println("printJobCompleted");
}
@Override
public void printJobFailed(PrintJobEvent arg0) {
System.out.println("printJobFailed");
}
@Override
public void printJobNoMoreEvents(PrintJobEvent arg0) {
System.out.println("printJobNoMoreEvents");
}
@Override
public void printJobRequiresAttention(PrintJobEvent arg0) {
System.out.println("printJobRequiresAttention");
}
});
job.print(doc, null);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
最后输出的结果只有
printDataTransferCompleted
printJobNoMoreEvents
为甚么没有
printJobCompleted呢,这样我起码还可以获取到打印完成了。。
还有第二个问题,实际打印的时候,会出现卡纸、缺纸等各种异常情况,这种信息只在打印机上提示了,如何才能用java(有C的程序也可以)把这些数据取出来呢,因为真正使用时,打印机是装在箱子里的,不能每次都拆出来看看打印机屏幕。
打印机的型号是Jet Pro M403d,
我是一个小白,第一次提问,只有这么2分了,希望大神们能提出点解决方法,目前没有打印机的二次开发包,头疼中