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

Publié par l'indik dans java

Sauf que si l'objet n'est plus utilisé, quand tu fait ton new , la mémoire sera automatiquement libéré si cela est nécessaire. Donc l'utilisation de System.gc() n'es...

Publié par vieux dans CMS

et comment ce le procurent ton ?

Publié par Ludwig dans tuto

Bonjour,
Il me semble que les plugins de gestion d'images sont payants pour TinyMCE et CKeditor, est-ce toujours le cas ?
Il manque amha l'excellent Xinha dans cette liste, qui lui est Open Sour...

Publié par skud dans java

La methode getTextFile() etant statique, il faut donc l'appeler de maniere statique. Modifier l'exemple de la maniere suivante

System.out.print(HTTPLoader.getTextFile('http://fobec.com/CMS/ind...

Publié par D&Atilde;&copy;butant dans CMS

merci , et bon courage pour d'autre programme