Stampare in Java

Java è un ottimo linguaggio di programmazione ad oggetti, molto semplice da imparare e ben strutturato. Inoltre ci sono ottimi ambienti di sviluppo opensource come eclipse e netbeans, tuttavia se per caso avete bisogno di stampare un report, magari creato con iText allora iniziano i dolori, prima di tutto perché la documentazione scarseggia… vediamo quindi di scrivere due righe sull’argomento.

Servizio di Stampa di Java
Servizio di Stampa di Java


Il sistema di stampa di Java lascia alquanto a desiderare. Per stampare un documento è necessario utilizzare le classi del package javax.print. Innanzitutto si deve ottenere la lista dei servizi di stampa disponibili, tramite il metodo:

PrintServiceLookup.lookupPrintServices(null, null);

quindi si cerca il servizio predefinito:

PrintServiceLookup.lookupDefaultPrintService();

a questo punto è possibile visualizzare la classica finestra di stampa (in versione Java), tramite il metodo:

selectedPrinter = ServiceUI.printDialog(null, 100, 100, services, defService, null, attrs);

con attrs creato tramite:

new HashPrintRequestAttributeSet();

Ora si può creare un PrintJob con:

DocPrintJob job = selectedPrinter.createPrintJob();

Quindi si carica il documento da stampare e si specifica il suo tipo (ovvero il Flavor)

FileInputStream file = new FileInputStream(report.pdf");
DocFlavor flavor = DocFlavor.INPUT_STREAM.PDF;

Infine, si crea un documento e si lancia la stampa:

SimpleDoc doc = new SimpleDoc(file, flavor, null);
job.print(doc, null);

Facile no?!?… Sì, però…

i problemi nascono con i DocFlavor, infatti dalla javadoc si possono vedere tutti i tipi di documenti supportati, tra cui PDF, HTML, PS, GIF, Text,…
però potrebbe sfuggirvi un piccolo particolare… questi tipi di documenti per poter essere stampati devono essere direttamente supportati dalla vostra stampante, cosa non scontata… la mia per esempio pare che non supporti praticamente nulla, neppure i PS…

Ma anche in questo caso linux ci viene in aiuto, infatti se in windows la mia stampante non supporta alcun tipo di documento, la stessa cosa non vale per linux… infatti CUPS mi permette di stampare PDF, PS, Text (gli altri non li ho provati). L’unico problema mi si è presentato con gli HTML, infatti la stampa funziona, ma mi stampa il sorgente HTML, non la pagina renderizzata…

in conclusione: il sistema di stampa di Java è alquanto limitante, ma grazie a CUPS ci possiamo mettere una pezza!!!

Nei prossimi post vi spiegherò un metodo per poter stampare i PDF anche in windows, e mostrerò come risolvere un problema che potrebbe presentarsi nella stampa con CUPS.

Un pensiero su “Stampare in Java”

  1. Ciao,
    non ho mai provato a stampare con questo sistema, ho sempre usato iText, ma non si può mai sapere …
    Può essere utile se dovrò fare un’applicazione standalone.
    Saluti

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...