I\'m trying to get some information about the printers on my system.
On Windows and Linux, with this code, only the PrinterName attribute is filled:
There are other PrintServiceAttribute implementations, but if you want to fetch more...
This is a dirty code only, you can also fetch unsupported values for doc flavor:
PrintService[] printServices =
PrintServiceLookup.lookupPrintServices(null, null); //get printers
for (PrintService printService : printServices) {
System.out.println("Found print service: " + printService);
Set attribSet = new LinkedHashSet();
Class extends Attribute>[] supportedAttributeCategories = (Class extends Attribute>[]) printService.getSupportedAttributeCategories();
for (Class extends Attribute> category : supportedAttributeCategories) {
DocFlavor[] flavors = printService.getSupportedDocFlavors();
for (DocFlavor flavor : flavors) {
Object supportedAttributeValues = printService.getSupportedAttributeValues(category, flavor, printService.getAttributes());
if (supportedAttributeValues instanceof Attribute) {
Attribute attr = (Attribute) supportedAttributeValues;
attribSet.add(attr);
} else if (supportedAttributeValues != null) {
Attribute[] attrs = (Attribute[]) supportedAttributeValues;
for (Attribute attr : attrs) {
attribSet.add(attr);
}
}
}
}
for (Attribute attr : attribSet) {
System.out.println(attr.getName());
System.out.println(printService.getDefaultAttributeValue(attr.getCategory()));
}
}
Note: You may see repeated values, but they can be filtered.