我需要对我的打印机有更多的控制权,然后我试图获得打印机的PrinterState,然后使用PrintStareReasons.我的代码如下:
public void checkPrinterStatus(){ try { logger.info("Check -------------- "); Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } PrintService printer = configParamPrintService.getPrintService(); logger.info("State " + printer.isAttributeCategorySupported(PrinterState.class)); Setattributes = getAttributes(printer); for(Attribute attr : attributes){ logger.info(attr.getName()); } } public static Set getAttributes(PrintService printer) { Set set = new LinkedHashSet (); //get the supported docflavors, categories and attributes Class extends Attribute>[] categories = (Class extends Attribute>[]) printer.getSupportedAttributeCategories(); DocFlavor[] flavors = printer.getSupportedDocFlavors(); AttributeSet attributes = printer.getAttributes(); //get all the avaliable attributes for (Class extends Attribute> category : categories) { for (DocFlavor flavor : flavors) { //get the value Object value = printer.getSupportedAttributeValues(category, flavor, attributes); //check if it's something if (value != null) { //if it's a SINGLE attribute... if (value instanceof Attribute) set.add((Attribute) value); //...then add it //if it's a SET of attributes... else if (value instanceof Attribute[]) set.addAll(Arrays.asList((Attribute[]) value)); //...then add its childs } } } return set; }
谷歌搜索我也写了getAttributes()来获取所有的归因,但PrinterState不存在.
这是所有属性的列表:
21.12.2015 16:48:56 INFO PrintWorker:142 - Check -------------- 21.12.2015 16:48:58 INFO PrintWorker:151 - State false 21.12.2015 16:48:58 INFO PrintWorker:154 - copies-supported 21.12.2015 16:48:58 INFO PrintWorker:154 - finishings 21.12.2015 16:48:58 INFO PrintWorker:154 - job-sheets 21.12.2015 16:48:58 INFO PrintWorker:154 - job-sheets 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - number-up 21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 21.12.2015 16:48:58 INFO PrintWorker:154 - orientation-requested 21.12.2015 16:48:58 INFO PrintWorker:154 - page-ranges 21.12.2015 16:48:58 INFO PrintWorker:154 - media 21.12.2015 16:48:58 INFO PrintWorker:154 - spool-data-destination
而
logger.info("State " + printer.isAttributeCategorySupported(PrinterState.class));
总是回来:
21.12.2015 16:48:58 INFO PrintWorker:151 - State false
我在Linux和Windows上测试了以下代码(7),但没有一个返回实际状态.可能是什么问题呢?打印机,驱动程序或我的代码?
isAttributeCategorySupported()
返回true
如果打印服务supports specifying a doc-level or job-level attribute in category
的打印请求,否则返回false.
看看官方的oracle文档会让我的观点更加清晰