Newsgroup: it.comp.java
Titolo: PrintJob è pazzo!

...o lo sono io?!?
Il codice che uso è il seguente
<code>
PageAttributes pAttr = new PageAttributes();		
pAttr.setColor(PageAttributes.ColorType.COLOR);		
pAttr.setPrintQuality(PageAttributes.PrintQualityType.HIGH);
 
PrintJob job = getToolkit().getPrintJob(this.application, "Stampa
documento", null, pAttr);
if (job != null) {
   Graphics page = job.getGraphics(); 
   if (page!= null) {
      PrinterPage printerPage = new PrinterPage(this, job, page,
this.image, xStart, yStart);
      printerPage.draw();				
   }
   job.end(); 
}
</code>
Ora, questo benedetto codice mi crea due problemi diversi su due pc
diversi (entrambi con WinXP e JRE 1.4.2_04):
-PC1 con stampante Canon i450. Preleva solo le impostazioni di default
per la stampante, anche se modifico le stesse nel dialog nativo della
stampante (è pazzo!?!?). Sta di fatto che con applicazioni normali
windows mi funziona. Siccome mi interessa solo il discorso
colore/monocromatico, ho provato a settare via software il colore
(PageAttributes.ColorType.COLOR come sopra)...non se frega
assolutamente (richiama sempre le info di default). Però
l'impostazione relativa alla qualità la prende.
-PC2 con stampante HP Business Inkjet 2200. Il contrario! NON preleva
le info di default, o meglio fa apparire sempre un dialog settato in
monocromatico. Però se cambio l'impostazione colore dal dialog, stampa
correttamente (ma naturalmente non posso obbligare l'utente a settare
ogni volta il parametro)
Dulcis in fundo, se può servire: i driver della Canon i450 sono quelli
originali (Canon), mentre quelli dell'HP sono quelli di Windows.
Vi prego, se non un consiglio almeno un suggerimento :)
Grazie in anticipo,
Animanera.

Ciao, Animanera!
Il giorno 24/04/2004 alle ore 11:54 hai scritto:
 A> ...o lo sono io?!?
PrintJob non e' pazzo, bisogna solo comprenderne la logica e capire che ogni
nuova istanza di un oggetto si porta dietro tutti i settaggi di default.
 A> Il codice che uso è il seguente
Tra pagina, attribitui e robe varie e' meglio partire da zero. Prova cosi':
  private PrinterJob printJob = PrinterJob.getPrinterJob();
  private PageFormat pageFormat = printJob.defaultPage();
[...]
  // Stampa con dialog di impostazione
  if (printJob.printDialog() == false)
    return;
  printJob.setPrintable(<classe prinable>, pf);
  try {
    printJob.print();
  } catch (Exception ex) { ex.printStackTrace(); }
[...]
  // Impostazione della stampante
  printJob.printDialog();
[...]
  // Impostazione della pagina
  pageFormat = printJob.pageDialog(pageFormat);
[...]
Ovviamente i tre casi (stampa con dialog, impostazione stampante e
impostazione pagina) devono essere messi in tre metodi diversi da chiamare
con le apposite voci di menu'. Per stampare senza dialog con i valori di
default togli il printDialog del primo caso.
Se PrintJob e PageFormat li istanzi una volta sola e usi sempre quelli,
tutte le impostazioni fatte nelle varie fasi verrano mantentue anche nelle
stampe successive.
Questo e' stato testato con una Epson 740 (driver Windows) e una C84 (driver
Epson) e funziona. Se non e' un problema di driver dovrebbe andare anche con
le tue.
Bye
-- 
Marco Maccaferri
MaccaSoft - 
http://www.maccasoft.com

[...]
Avevo letto da qualche parte che PrinterJob non consentiva di
specificare la risoluzione di stampa (utilizzava sempre 72dpi). Ad
ogni modo provo e ti faccio sapere.
Grazie, Bye, Animanera. :)

Ciao, Animanera!
Il giorno 24/04/2004 alle ore 17:17 hai scritto:
 A> Avevo letto da qualche parte che PrinterJob non consentiva di
 A> specificare la risoluzione di stampa (utilizzava sempre 72dpi).
Sinceramente non saprei, comunque ci possono essere varie interpretazioni
per i dpi supportati da un sistema. Per esempio anche il PostScript e' a 72
dpi, sara' poi la stampante a tracciare i vari elementi con la precisione
richiesta dai dpi di stampa.


L'ho provato e funziona! Grazie infinite! :)))
Per ciň che concerne i dpi, ho risolto lavorando su un'immagine a
300dpi ed effettuando una AffineTransform (solo alla fine) per ridurne
la dimensione, cioč qualcosa del genere:
AffineTransform tx = new AffineTransform();
tx.scale(0.24, 0.24); //0.24 = 72/300
g2d.drawImage(this.img, tx, this.application);
Bye, Animanera.
