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 2939 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par vieux dans CMS

et comment ce le procurent ton ?

Publié par nicolasterraes dans tuto

bonjour,
je ne comprends pas cette tape:

Les liens vers les feuilles de style et les fichier js sont declares dans les pages HTML. Modifiez les balises meta ainsi:
Feuille de style:
d...

Publié par Tchat dans news

Analyses interessantes.
J'ai constate aussi des comportements etranges de Google concernant les placements des sites sur leurs requetes.
Par contre j'ai remarque que Google ne tient pl...

Publié par Fokoneh dans java

Je teste d'abord, Je reviens

Publié par MeepMeep dans tuto

Attention, un petit correctif a apporter :
headerContent-type: $header_contenttype charset: UTF-8
Remplacer charset: UTF-8 par charsetUTF-8
La difference est subtile mais susceptible d'etre m...