ok, l'immagine è generata da una classe e salvata su una variabile BufferedImage.
Questo è il codice che stampa:
codice:
PrinterJob printJob = PrinterJob.getPrinterJob ();
Book book = new Book();
PageFormat pg = new PageFormat();
Paper p = new Paper();
p.setSize(8.3*72,11.7*72);
p.setImageableArea(36, 36, p.getWidth()-72, p.getHeight()-72);
pg.setPaper(p);
book.append( new PrintablePage(curImg), pg );
printJob.setPageable( book );
printJob.setJobName("Tag");
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
try{
printJob.setPrintService(services[1]);
if (printJob.printDialog()) {
printJob.print();
}
}catch ( Exception ex ){}
questo è il codice della classe PrintablePag:
codice:
import java.awt.*;
import java.awt.print.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.ImageIO;
public class PrintablePage implements Printable, ImageObserver
{
BufferedImage img = null;
public PrintablePage( BufferedImage img){
this.img=img;
}
public int print( Graphics g, PageFormat pageFormat, int page ){
try{
g.drawImage( img, (int) pageFormat.getImageableX() , (int) pageFormat.getImageableY() , this );
}catch (Exception ex ){ex.printStackTrace();}
return (PAGE_EXISTS);
}
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
{
return false;
}
}
Sono riuscito ad aggiungere la finestra di dialogo per la stampa, ma il problema è che non mi stampa l'immagine in base alla risoluzione di BufferedImage, ma stampa sempre e 72dpi anche se l'immagine è a 300. Quindi diventa enorme e di pessima qualità.
Grazie