Publié le 03/12/2013
Auteur Axel
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Obtenir les proprietes d'une imprimante

Un poste de travail comporte des connexions vers un ou plusieurs périphériques, en particulier à ne imprimante. Au sein d'une application JAVA, le développeur dispose du package PrintServiceLookup qui permet de lister les imprimantes connectés, connaitre l'imprimante par défaut ou encore déterminer les propriétés du périphérique.

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
XP-PRINTERHP Officejet Pro 8600
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
queued-job-count: 0
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/gif
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.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
03/12/2013
Visualisation
vu 2747 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Axel dans java

Bonjour Kezouille,
je viens de tester sur notre LAN (serveur Windows 7), la surveillance a l'air de marcher.
De votre cote, s'agit-il d'un serveur sous Windows ou sous Linux ?
Pouvez-vou...

Publié par gilles dans logiciel

Bonjour,

j'utilise quotidiennement votre excellent logiciel complet et ergonomique.

Mais depuis quelques jours j'ai un probleme il recherche indefiniment resolution du nom de l'hote.

Publié par fobec dans CMS

faire le menage !!!!

Publié par titi dans tuto

test de ce truc! eh ben exigeant en plus

Publié par Josalado dans CMS

je n'arrive pas à installer le logiciel <br>Message d'erreur : l'assistant d'installation n'a pas pu créer le dossier C:\program Files\Olibul <br>...