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.
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.



















