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

Guida Java 2D - Capitolo 45: Strumenti avanzati: gestire la stampa dei documenti.

 

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.

 

 
Vai all'inizio della pagina