Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957

    [Java] Stampare un'immagine

    Ciao a tutti,
    devo stampare un'immagine in un foglio... ho visto che è un bel casino.
    Sono riuscito ad avviare una stampa alla stampante predefinita, però non capisco come impostare la risoluzione, e se è possibile far comparire la finestra di proprietà di stampa all'utente...
    Grazie ciao!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Maggiori dettagli. L'immagine e' un file sul tuo disco, un'immagine presente in un frame o cos'altro?
    Magari posta anche il codice che hai scritto per ora per la parte riguardante la stampa.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    mmh... Non riesco a riprodurre l'errore.
    Ho creato una BufferedImage e l'ho mandata in stampa con il tuo codice, ma come risoluzione mi da 300. Sicuro che sia a 72?
    Posta anche un esempio di codice in cui costruisci l'immagine.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    MMh, l'immagine è un codice a barre creato da una libreria di cui non ho la sorgente.
    Comunque l'immagine risulta correttamente una png a 300dpi, il problema è che quando la mando in stampa con il codice sopra viene stampata a 72dpi e non 300.
    Penso sia un problema di impostazione della pagine, dovrei specificare da qualche parte una risoluzione di stampa...

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    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");
    PrintRequestAttributeSet attrSet = new HashPrintRequestAttributeSet();
    attrSet.add(new PrinterResolution(300,300,ResolutionSyntax.DPI));
    PrintService[] services = PrintServiceLookup.lookupPrintServices(null, attrSet);
    try{
         if (printJob.printDialog()) {
             printJob.print();
         }
    }catch ( Exception ex){}
    
    Prova cosi'.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    ho aggiunto anche printJob.setService(services[0]), ma comunque non va... :-(

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Per curiosita, fai un'ultima prova.
    Togli la finestra di dialogo e fai il dopo printJob.setService(services[0]). Naturalmente prima, setta la risoluzione. Non vorrei che una volta aperta la finestra di dialogo, ti sovrascriva gli attributi con quelli passati dalla finestra stessa, perche' anche QUA sembrano avere lo stesso problema

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    non credo perchè ho scoperto come mettere la finestra di dialogo DOPO aver scoperto come si seleziona la stampante ... cmq proverò.
    Grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Sono ancora fermo su questo problema....
    provo a rispiegare.

    Ho una classe che mi genera un'immagine PNG a 300dpi. 480x210 px
    vorrei stampare questa immagine al centro superiore di un foglio A4 con dimensioni specifiche.

    Attualmente con il codiche che ho copiato sopra ottengo un'immagine enorme di 150x80mm (penso perchè la stampante stampa a 72dpi)
    Come posso far stampare l'immagine a dimensioni stabilite ma con una qualità decente?

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.