I need more control of my printer, and then I try to get a PrinterState of my printer, and then use PrintStareReasons. My code is as follows:
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)); Set<Attribute> attributes = getAttributes(printer); for(Attribute attr : attributes){ logger.info(attr.getName()); } } public static Set<Attribute> getAttributes(PrintService printer) { Set<Attribute> set = new LinkedHashSet<Attribute>(); //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 something if (value != null) { //if it a SINGLE attribute... if (value instanceof Attribute) set.add((Attribute) value); //...then add it //if it a SET of attributes... else if (value instanceof Attribute[]) set.addAll(Arrays.asList((Attribute[]) value)); //...then add its childs } } } return set; }
Googling I also write getAttributes () to get all attributes, but PrinterState is not present.
This is a list of all the attributes:
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
Until
logger.info("State " + printer.isAttributeCategorySupported(PrinterState.class));
always returns:
21.12.2015 16:48:58 INFO PrintWorker:151 - State false
I tested the following code on Linux and Windows (7), but none of them returned the actual status. What could be the problem? Printer, driver or my code?
source share