Conoscere stato stampante

di il
3 risposte

Conoscere stato stampante

Buongiorno a tutti, ringrazio in anticipo chi puo' darmi una mano oppure un consiglio.
mi serve sapere lo stato di una stampante, quindi disponibile,attivo,acceso,spento (dovrebbe essere un intero, su cui poi avere uno switch per dare lo stato in output da inserire in un json) per poi eventualmente stampare.grazie

1)questo blocco mi stampa tutti i nomi delle stampanti disponibili, sono info utili ma non è quello che mi serve
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
for (int i = 0; i < services.length; i++) {
System.out.println(services.getName());
}

2)con questo blocco posso fare una ricerca in base al nome delle stampanti e ho queste info, ma non sono quelle che mi servono
color-supported: not-supported
printer-is-accepting-jobs: accepting-jobs
printer-name: NOME STAMPANTE
queued-job-count: 0

for (int i = 0; i < services.length; i++) {
if(services.getName().equals("NOME STAMPANTE")) {
att = services.getAttributes();
for (Attribute a : att.toArray()) {
System.out.println(a.getName() + ": " + att.get(a.getClass()).toString();
}

3)quest'ultimo blocco mi stampa printer state 0 e printer status 3, ma in caso di stampante off o disconnessione dalla lan l'output resta sempre printerstate 0 e printerstatus 3, mentre in realta' dovrebbe cambiare.
ProcessBuilder builder = new ProcessBuilder("powershell.exe", "get-wmiobject -class win32_printer | Select-Object Name, PrinterState, PrinterStatus | where {$_.Name -eq '"+services.getName()+"'}");

String fullStatus = null;
Process reg;
builder.redirectErrorStream(true);
try {
reg = builder.start();
InputStream inputStream = reg.getInputStream();

//conversione da input stream a stringa, con un metodo definito all'esterno
fullStatus = getStringFromInputStream(reg.getInputStream());
reg.destroy();
} catch (IOException e1) {
e1.printStackTrace();

3 Risposte

  • Re: Conoscere stato stampante

    buleano ha scritto:


    mi serve sapere lo stato di una stampante, quindi disponibile,attivo,acceso,spento (dovrebbe essere un intero, su cui poi avere uno switch per dare lo stato in output da inserire in un json) per poi eventualmente stampare.
    Dalla Print Service API credo (a memoria vado) non sia così facile né sempre possibile. Ci sono due implementazioni di PrintServiceAttribute che potrebbero essere utili/sensate in questo caso: PrinterState e PrinterStateReasons. Peccato che non sono sempre supportati. Con la mia HP 1022nw ad esempio avevo già visto che non saltano fuori da questa API.

    Quindi devi trovare qualche altro modo per farlo (ammesso ci sia).
  • Re: Conoscere stato stampante

    Ciao andbin e grazie per la risposta, si ho gia' provato
    PrintService ps = PrinterJob.getPrinterJob().getPrintService();
    //System.out.println(ps);
    PrinterState prova = (PrinterState) ps.getAttribute(PrinterState.class);
    System.out.println(prova);
  • Re: Conoscere stato stampante

    Ciao andbin e grazie per la risposta, si ho gia' provato usando printerstate ma il valore è sempre null ricavandolo dal printerSerivce, quindi non posso neanche usare i metodi collegati ad una variabile di tipo printerstate. il problema usando la powershell potrebbe essere collegato al wmi che prende i dati da spools.exe e il driver della stampante potrebbe non riportare il dato. Infatti se accendo e spengo la stampante, o stacco il cavo, l'otput è sempre
    Name PrinterState PrinterStatus
    ---- ------------ -------------
    nome stampante 0 3
    ho usato vari metodi con printerstate tra cui questo, ma mi tornano tutti null. comunque grazie, se qualcun altro puo' aiutarmi con consigli o miglioramenti con il driver e la powershell
    PrintService ps = PrinterJob.getPrinterJob().getPrintService();

    PrinterState prova = (PrinterState) ps.getAttribute(PrinterState.class);
    System.out.println(prova);
Devi accedere o registrarti per scrivere nel forum
3 risposte