NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Java 2D - 45: gestire la stampa dei documenti

Guida Java 2D, corso di base 

 

Il supporto per la stampa fornito da Java permette di stampare i documenti in maniera abbastanza semplice.

Il set di strumenti e di impostazioni è molto vasto e non verrà trattato in questo capitolo nella sua interezza: ci soffermeremo sugli aspetti principali, su 'cosa serve per stampare' un documento.

 

Per gestire un processo di stampa abbiamo bisogno di almeno due componenti:

  • un oggetto che implementi l'interfaccia Printable;
  • utilizzare la classe PrinterJob per avviare il processo di stampa vero e proprio.

 

 

 

Per avvalerci di tali strumenti dovremo importare i packages java.awt.print e javax.print.attribute.

 

L'interfaccia Printable rappresenta un oggetto che deve poter essere stampato (Printable significa letteralmente 'stampabile').

Per implementare Printable dovremo riscrivere il metodo:

print(Graphics g, PageFormat format, int page)   :   int .

 

Tale metodo restituisce un intero, il cui valore può essere uno tra i seguenti (costanti predefinite, significati ovvi): PAGE_EXISTS o NO_SUCH_PAGE.

 

Il documento da stampare viene quindi trattato come un oggetto visuale, dotato di un proprio contesto grafico ove definire gli elementi da visualizzare --> stampare.

 

Il parametro intero page specifica la pagina da stampare (si inizia da 0).

 

Il parametro format indica le dimensioni della carta e dei margini; è di tipo PageFormat, una classe provvista di campi e metodi atti a descrivere dimensione ed orientamento della pagina da stampare. Il costruttore di PageFormat è il seguente:

PageFormat();

mentre metodi utili di tale classe sono, ad esempio:

getWidth()   :   double Restituisce la larghezza, in punti, della pagina.
getHeight()   :   double Restituisce l'altezza, in punti, della pagina.
getImageableX()   :   double Restituisce la coordinata X del punto in alto a sinistra dell'area stampabile (quella, cioè, racchiusa entro i margini).
getImageableY()   :   double Restituisce la coordinata Y del punto in alto a sinistra dell'area stampabile (quella, cioè, racchiusa entro i margini).
getImageableWidth()   :   double Restituisce la larghezza dell'area stampabile (quella, cioè, racchiusa entro i margini).
getImageableHeight()   :   double Restituisce l'altezza dell'area stampabile (quella, cioè, racchiusa entro i margini).
getOrientation()   :   int Restituisce l'orientamento della pagina.
setOrientation(int orientation)   :    void Imposta l'orientamento della pagina.
defaultPage()   :   PageFormat Crea un PageFormat con attributi di default.

 

Per una trattazione più approfondita, si rimanda alle API ufficiali di PageFormat.

 

Le dimensioni sono sempre espresse in 'punti'; un foglio A4 con orientamento verticale ha, ad esempio, dimensioni 595x842 punti.

 

A questo punto bisogna avviare il processo di stampa vero e proprio.

 

Per prima cosa dobbiamo ottenere un'istanza di PrinterJob mediante il metodo statico:

  • getPrinterJob()   :   PrinterJob

 

Occorrerà, poi, impostare l'oggetto Printable precedentemente definito come documento da stampare in PrinterJob; per farlo, potremo avvalerci di uno dei seguenti metodi di PrinterJob:

  • setPrintable(Printable painter)   :   void
  • setPrintable(Printable painter, PageFormat format)   :   void

 

Dovremo poi visualizzare la finestra di dialogo della stampa (per scegliere qualità, stampante, ...), cosa fattibile con uno dei seguenti metodi di PrinterJob:

  • printDialog()   :   boolean
  • printDialog(PrintRequestAttributeSet attributes)   :   boolean

 

A questo punto potremo finalmente avviare la stampa; anche in questo caso, abbiamo a disposizione due metodi di PrinterJob per effettuare tale operazione:

  • print()   :   void
  • print(PrintRequestAttributeSet attributes)   :   void .

 

NOTA IMPORTANTE: con queste istruzioni non abbiamo modo di indicare a Java il numero di pagine da stampare, che vedrà solo un intervallo di pagine "da 1 a 1" per volta.

 

Per risolvere questo problema, ci si può avvalere di oggetti Book.

 

La classe Book (lett.: libro), che implementa l'interfaccia Pageable, è un 'libro', una collezione di Printable, ciascuno dei quali può avere un formato proprio, anche diverso da quello degli altri Printable della 'collezione'.

 

Book ha come costruttore:

  • Book()

e mette a disposizione, tra gli altri, i seguenti metodi:

append(Printable painter, PageFormat page)   :   void Aggiunge un Printable con formato di pagina PageFormat in coda all'insieme di pagine del Book.
append(Printable painter, PageFormat page, int numPages)   :   void Aggiunge un Printable di numPages pagine con formato di pagina PageFormat in coda all'insieme di pagine del Book.
setPage(int pageIndex, Printable painter, PageFormat page)   :   void Imposta un Printable con formato di pagina PageFormat nel Book assegnandogli numero di pagina pageIndex.
getNumberOfPages()   :   int Restituisce il numero di pagine del Book.
getPageFormat(int pageIndex)   :   PageFormat Restituisce il formato di pagina della pagina posta in posizione pageIndex all'interno del Book.
getPrintable(int pageIndex)   :   Printable Restituisce il Printable posto in posizione pageIndex all'interno del Book.

 

Per stampare un Book, lo si dovrà impostare nel processo di stampa mediante il metodo di PrinterJob:

setPageable(Pageable document)   :   void .

 

In questo modo, PrinterJob saprà quante pagine dovrà stampare.

 

Pagina di Francesco Milanese (redbaron85) su Facebook   Pagina di Francesco Milanese (redbaron85) su Google Plus   Profilo di Francesco Milanese (redbaron85) su LinkedIn   Pagina di Francesco Milanese (redbaron85) su Twitter   Canale Youtube di Francesco Milanese (redbaron85ct)

Vai all'inizio della pagina