Lister les imprimantes installées sur le poste
Comment lister les imprimantes ?Le package PrintServiceLookup contient la fonction lookupPrintServices() qui se charge de lister l'ensemble des imprimantes installées sur le poste de travail.
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++) {
System.out.println(services[i].getName());
}
Exemple de nom d'imprimante
PDFCreator
Imprimante PDF Sage
Canon iP4300
Connaitre l'imprimante par défaut
Lorsque une nouvelle tache d'impression est émise, il est bon de connaitre l'imprimante sur laquelle les pages vont être imprimées. La fonction lookupDefaultPrintService() retourne le nom de l'imprimante sélectionnée par défaut.
PrintServiceLookup.lookupDefaultPrintService();
Lister les propriétés et l'état d'une imprimante
Avant de lancer une impression, le package PrintServiceLookup dispose de fonctions permettant de connaitre l'état, le nombre de taches en spool ou encore les formats supportés.
Attribute[] attrs = printService.getAttributes().toArray();
for (int i = 0; i < attrs.length; i++) {
System.out.println(attrs[i].getName() + ": " + attrs[i]);
}
Exemple
color-supported: supported
printer-is-accepting-jobs: accepting-jobs
Lister les formats acceptés
A choisir une imprimante installée sur le poste, mieux vaut sélectionner celle qui saura comprendre nos instructions. La fonction getSupportedDocFlavors() liste les formats de données traités par le périphérique.
DocFlavor[] flavors = printService.getSupportedDocFlavors();
for (int j = 0; j < flavors.length; j++) {
String repclass = flavors[j].getRepresentationClassName();
//filtrer celle qui accepter l'écriture de données
if (repclass.equals("java.io.InputStream")) {
System.out.println(flavors[j].getMimeType());
}
}
Exemple de formats de donnée
image/jpeg
image/png
application/octet-stream
Class JAVA pour communiquer avec une imprimante
Regroupons les fonctions vues ci-dessous dans une class. Je vous invite à coller le code dans votre editeur Java favori et de lancer la class sur votre poste de travail.
import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.Attribute;
/**
* Obtenir les proprietes d'une imprimante
* @author Axel decmbre 2013
* http://www.fobec.com/java/1136/obtenir-proprietes-une-imprimante.html
*/
public class PrinterFinder {
/**
* Lister les imprimantes installées sur le poste
*/
public void getAvailable() {
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++) {
System.out.println(services[i].getName());
}
}
/**
* Obtenir le nom de l'imprimante par defaut
*/
public PrintService getDefault() {
return PrintServiceLookup.lookupDefaultPrintService();
}
/**
* Lister les propriétés et l'état d'une imprimante
*/
public void getProperty(PrintService printService) {
Attribute[] attrs = printService.getAttributes().toArray();
for (int i = 0; i < attrs.length; i++) {
System.out.println(attrs[i].getName() + ": " + attrs[i]);
}
}
/**
* Lister les formats acceptés
* @param printService
*/
public void getSupportedFormat(PrintService printService) {
DocFlavor[] flavors = printService.getSupportedDocFlavors();
for (int j = 0; j < flavors.length; j++) {
String repclass = flavors[j].getRepresentationClassName();
//filtrer celle qui accepter l'écriture de données
if (repclass.equals("java.io.InputStream")) {
System.out.println("t" + flavors[j].getMimeType());
}
}
}
/**
* Exemple
* Les tests sont effectués sur l'imprimante par défaut
*/
public static void main(String[] args) {
PrinterFinder printerFinder = new PrinterFinder();
printerFinder.getAvailable();
printerFinder.getProperty(printerFinder.getDefault());
printerFinder.getSupportedFormat(printerFinder.getDefault());
}
}
Lorsqu'une application écrite en JAVA lance une impression, mieux vaut vérifier certains choses sur l'imprimante. Ces fonctions permettent de faire des tests avant de lancer une tache d'impression et d'informer l'utilisateur sur les imprimantes connectés à son poste de travail.