Stampa di immagini


DOMANDA:

Come posso effettuare la stampa su carta di immagini utilizzando Java?


RISPOSTA:

Possiamo cambiare di poco il codice che abbiamo utilizzato in questo altro post ed essere in grado di stampare immagini su fogli di carta A4.

package stampa;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;

import javax.imageio.ImageIO;

public class Stampa implements Printable {

    public Stampa() {
        try {
            PrinterJob pj = PrinterJob.getPrinterJob();
            pj.setJobName("TestStampa");
            pj.printDialog();
            pj.setPrintable(this);
            pj.print();
        } catch (PrinterException e) {
            e.printStackTrace();
        }
    }

    public int print(Graphics g, PageFormat pf, int page)
        throws PrinterException {

        // abbiamo solo una pagina (l'indicizzate da 0)
        if (page > 0) {
            return NO_SUCH_PAGE;
        }

        BufferedImage img = loadImage("image.png");
        int marginX = (int) pf.getImageableX();
        int marginY = (int) pf.getImageableY();
        int width = (int) pf.getImageableWidth();
        int height = (int) pf.getImageableHeight();

        g.drawImage(
            img, marginX , marginY , width, height, // destinazione
            0, 0, img.getWidth(), img.getHeight(), null  //sorgente
        );

        return PAGE_EXISTS;
    }

    private BufferedImage loadImage(String path) {
        BufferedImage bimg = null;
        BufferedImage ret = null;
        try {
            bimg = ImageIO.read(new File(path));
        } catch (Exception e) {
            e.printStackTrace();
        }
        ret = new BufferedImage(bimg.getWidth(), bimg.getHeight(),
             BufferedImage.TYPE_INT_ARGB);  // immagine con alpha
        Graphics2D g = ret.createGraphics();
        g.drawImage(bimg, 0, 0, null);
        g.dispose();
        return ret;
    }


La classe di Test è sempre la stessa:

package stampa;

import java.awt.print.PrinterException;

public class TestStampa{

   public static void main(String[] args) throws PrinterException{
        new Stampa();
   }
}


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java