Login
Cerca all'interno di JavaPortal
Help
Home Page Documentazione Forum Progetti Partner Pubblica!
Documentazione > Tutorial > Java Print Service
Modifica Impostazioni
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy

Hai una tesi in Java?
Tesine preparate
per esami?
Pubblica tutto su
JavaPortal!

Scrivi al nostro staff


IntelliJ IDEA Free e Open Source


John Fitzgerald Kennedy
L'uomo è il computer più straordinario di tutti


MQSQL - Driver JDBC


Rss Feed
Home Page
Articoli
News
Forum
Classi

  Visualizza Commenti (0) Aggiungi Commento    
Add to Shortcuts
 
Vota l'articolo
Java Print Service
By Antonio Trobbiani
12 settembre 2005

  Java Print Service
Program Specificare il formato del documento
Program Specificare gli attributi di stampa
Program Localizzare una stampante
Program Creare un lavoro di stampa
Program Stampare, ovvero richiamare il metodo Print

Con l'introduzione dell' API Java Print Service (JPS) si è fatto un notevole progresso per quanto riguarda il processo di gestione della stampa con la piattaforma Java, creando una struttura di supporto efficace per le applicazioni che intendono gestire tale processo.

L'API Java Print Service, introdotta con la versione 1.4 del JDK, ha il compito supportare tutte le funzionalità di stampa su ogni piattaforma Java, comprese quelle piattaforme che richiedono gli small footprint devices, come i Personal Digital Assistance (PDA), ossia quei dispositivi che richiedono poche risorse di sistema (RAM e dischi) pur assicurando buone prestazioni su pc di basso costo.

Oltre a soddisfare le caratteristiche di stampa già presenti nell'API Java 2D (java.awt.print), introduce i seguenti miglioramenti:

l'implementazione delle specifiche del protocollo IPP (Internet Printing Protocol), dove vengono specificati gli attributi standard supportati, precisati nelle Specifiche IETF RFC 2911 Internet Printing Protocol ver. 1.1: Model and Semantics;

la possibilità da parte delle applicazioni di estendere gli attributi inclusi nell'API JPS;

terze parti possono inserire i propri servizi di stampa grazie a Service Provider Interface (SPI) come definito dalle specifiche contenute nel file SPI JAR;

cercare e selezionare stampanti in base a precise caratteristiche e specificando le proprietà direttamente nel processo di stampa.

In questo articolo con il termine servizi di stampa si intende un'interfaccia che rappresenta una specifica stampante alla quale l'applicazione, una volta impostati gli attributi voluti, delega il compito di stampare.

I packages che compongono l'API Java Print Service sono quattro. Vediamo adesso una breve descrizione di questi singoli elementi, che ci aiuterà a costruirci il modello mentale di come in JPS sono suddivisi i compiti. Approfondiremo più avanti ogni singolo package, analizzando le singole parti del codice di esempio utilizzato per effettuare la stampa di un file in un formato comunemente utilizzato. Il listato completo del codice è riportato alla fine dell'articolo.

javax.print

Individua i servizi di stampa che hanno la capacità di soddisfare le richieste dell'applicazione;
Specifica il formato dei dati da stampare;
Crea lavori di stampa per un servizio di stampa;
Invia i dati di stampa ad una stampante o ad un flusso.

javax.print.attribute

Fornisce classi e interfacce che descrivono i tipi degli attributi supportati da JPS e come possono essere valorizzati.

javax.print.attribute.standard

Contiene le classi che definiscono tutti gli attributi standard supportati da JPS.

javax.print.event

Comprende le classi e le interfacce che consentono di monitorare i servizi di stampa e lo stato di avanzamento di uno specifico lavoro.

Un'applicazione che utilizza l'API Java Print Service effettua le seguenti operazioni per processare una richiesta di stampa:

Specifica il formato del documento. Cioè ottiene un appropriato DocFlavor, vale a dire una classe che definisce i dati della stampa.

Specifica gli attributi di stampa, generando ed impostando un AttributeSet. Un AttributeSet incapsula una collezione di attributi che descrivono le proprietà richieste al servizio di stampa come il numero di copie, l'orientamento, ecc.

Localizza un servizio di stampa che può trattare la richiesta di stampa, così come specificata dal DocFlavor e dall'insieme degli attributi.

Genera un lavoro di stampa per il servizio di stampa.

Richiama il metodo Print del servizio di stampa.

Vediamo ora più dettagliatamente queste operazioni.



Specificare il formato del documento top

Per indicare il formato del documento che si intende stampare, utilizziamo la classe DocFlavor del package javax.print. Questa classe è utilizzata per impostare il tipo MIME dell'oggetto, comunicando come saranno interpretatati i dati. La classe DocFlavor fornisce sette sottoclassi, una per ciascuno dei formati più comuni che possiamo suddividere in tre sottogruppi:

BYTE_ARRAY, INPUT_STREAM e URL          che possiamo definire byte-oriented

CHAR_ARRAY, READER e STRING                che possiamo definire character-oriented

SERVICE_FORMATTED                         che possiamo definire service-oriented

Ognuno di questi sottogruppi, a sua volta, supporta il suo set di tipi MIME.

I tipi byte-oriented sono:

AUTOSENSE

GIF

JPEG

PCL

PDF

PNG

POSTSCRIPT

TEXT_HTML_HOST

TEXT_HTML_US_ASCII

TEXT_HTML_UTF_16

TEXT_HTML_UTF_16BE

TEXT_HTML_UTF_16LE

TEXT_HTML_UTF_8

TEXT_PLAIN_HOST

TEXT_PLAIN_US_ASCII

TEXT_PLAIN_UTF_16

TEXT_PLAIN_UTF_16BE

TEXT_PLAIN_UTF_16LE

TEXT_PLAIN_UTF8

I tipi character-oriented sono:

TEXT_HTML

TEXT_PLAIN

I tipi service-oriented sono:

PAGEABLE

PRINTABLE

RENDERABLE_IMAGE

L'impostazione del formato del documento viene effettuata come descritto dal codice sottostante (nell'esempio per un'immagine GIF)

      DocFlavor docFlv = DocFlavor.INPUT_STREAM.GIF; 



Specificare gli attributi di stampa top

Una volta impostato il formato del documento, sarà necessario impostare gli attributi di stampa per descrivere come vogliamo che il documento venga prodotto. È possibile impostare gli attributi relativi al numero di copie, orientamento della carta, formato, intervallo di pagine ecc.

L'API Java Print Service include due packages che definiscono gli attributi: javax.print.attribute e javax.print.attribute.standard. Il primo contiene le interfacce e le classi che descrivono i tipi di attributi e come sono raccolti. L'altro enumera tutti gli attributi standard dell'API. La maggior parte delle definizioni di attributo dell'API, sono implementazioni standard ed estendibili definiti dalle specifiche Internet Printing Protocol (IIP).

Possiamo impostare questi valori utilizzando una delle due classi seguenti:

  • DocAttributeSet          Specifica le caratteristiche per un singolo documento
  • PrintRequestAttributeSet        Specifica le caratteristiche per un singolo lavoro di stampa

Per specificare gli attributi per un lavoro di stampa, occorre creare l'istanza del tipo appropriato (DocAttributeSet oppure PrintRequestAttributeSet) ed impostare i valori desiderati.

Nel frammento di codice che segue vediamo come impostare alcuni degli attributi di stampa

     PrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
      attrSet.add(MediaSizeName.ISO_A4);
      attrSet.add(OrientationRequested.LANDSCAPE);
      attrSet.add(new Copies(1));



Localizzare una stampante top

A questo punto occorre verificare che ci sia almeno una stampante le cui caratteristiche corrispondano con i valori che abbiamo precedentemente impostato.

Visto che gli oggetti printer sono chiamati print service (servizio di stampa) ed il processo di identificazione è denominato lookup, la classe che supporta questo compito prende il nome di  PrintServiceLookup contenuta nel package javax.print. PrintServiceLookup fornisce alle applicazioni i metodi per individuare le stampanti standard disponibili. Per permettere alle applicazioni di localizzare altri tipi di stampanti, come stampanti IIP o stampanti JINI, un fornitore di oggetti print-service può installare dinamicamente le implementazioni di PrintServiceLookup, utilizzando le specifiche definite nel file SPI JAR.

Per localizzare un servizio di stampa è possibile utilizzare uno dei tre metodi seguenti:

public static final PrintService   lookupDefaultPrintService()

public static final PrintService[] lookupPrintServices(DocFlavor flavor, AttributeSet attributes)

public static final MultiDocPrintService[] lookupMultiDocPrintServices(DocFlavor[] flavors, AttributeSet attributes)

Il metodo lookupDefaultPrintService() restituisce il servizio di stampa di default.

Il metodo lookupPrintServices () restituisce la collezione di stampanti che supporta le caratteristiche di una specifica tipologia di documento (Es. GIF) con uno specifico set di attributi (es. stampa fronte-retro).

Il metodo lookupMultiDocPrintService() fornisce il supporto per la stampa di più documenti contemporaneamente. La porzione di codice che segue, è quella che nel nostro esempio utilizziamo per il lookup dei print service disponibili

        PrintService[] prServ = PrintServiceLookup.lookupPrintServices(docFlv, attrSet);



Creare un lavoro di stampa top

Una volta localizzato il servizio di stampa che si desidera utilizzare, occorre creare un lavoro di stampa da inviare al servizio di stampa.

Per la creazione del servizio di stampa, utilizziamo l'oggetto PrintService restituito dal metodo di lookup, utilizzando il metodo createPrintJob(), come descritto dal codice seguente:

        PrintService[] prServ = PrintServiceLookup.lookupPrintServices(docFlv, attrSet);
            if (prServ.length > 0)
        {
              // Crea il DocPrintJob
              DocPrintJob prJ = prServ[0].createPrintJob();
       ...
       ...
}



Stampare, ovvero richiamare il metodo Print top
Abbiamo visto come specificare il formato di un documento, come impostare gli attributi di stampa, come localizzare il servizio di stampa che soddisfa le nostre richieste ed abbiamo infine generato il lavoro di stampa. Non ci rimane altro che stampare.

Per stampare il lavoro di stampa che abbiamo costruito, non dovremo fare altro che richiamare il metodo print() dell'oggetto DocPrintJob, generato da PrintService, come mostrato dal codice che segue

prJ.print(doc, attrSet);

Questo è il codice completo dell'esempio che abbiamo utilizzato per descrivere le varie fasi del processo di stampa tramite l'API Java Print Service (JPS).

Riepilogando, abbiamo visto come è strutturata l'API Java Print Service (JPS), iniziando mostrando i campi di utilizzo ed i miglioramenti apportati rispetto al processo di gestione di stampa prima della versione 1.4 del JDK.

Quindi abbiamo preso in considerazione i singoli package che compongono l' API JPS, che sono:

• javax.print

• javax.print.attribute

• javax.print.attribute.standard

• javax.print.event

Qui di seguito trovate gli step necessari per processare una richiesta di stampa e precisamente:

• Specificare il formato del documento

• Generare ed impostare gli attributi di stampa

·• Localizzare un appropriato servizio di stampa

• Generare un nuovo lavoro di stampa

• Richiamare il metodo Print per stampare il documento

Per approfondire le caratteristiche dei singoli packages dell'API approfittate della descrizione di queste operazioni.

Nei successivi articoli vedremo come esporre questo servizio di stampa in un ambiente j2ee compliant e come esportare tale funzionalità tramite web service.



 Attachments List
HTML Documentpackage prservice.htm
Username:
Password:
To sign up for an account, click register... Register
Hide





Powered By



Campagna Anti-IF


Skin


PARTNER
Zio Budda
HostingJava


LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is domenica 1 agosto 2010