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

Publié par Daxentuut dans java

Avec les imports c'est mieux :

import java.awt.AWTException
import java.awt.Robot
import java.awt.event.KeyEvent
import java.io.IOException
import java.util.logging.Level
import...

Publié par Christophe dans CMS

je te propose d'améliorer la fonction
procedure TForm1.Button1Click(Sender: TObject);
begin
GetDesktopListViewHandle;
ListView_SetTextBkColor(hLV, $FFFFFFFF);
ListView_Re...

Publié par Julie dans logiciel

C'est donc un moteur de recherche specialise. On peut vraiment rechercher tous les domaines que l'on veut. Cela permettrait aux gens de ne plus se faire arnaquer. Quelle bonne idee!

Publié par neuro dans CMS

exemple edifaint et trés interessant

Publié par options binaires dans php5

genial l'outil ! merci