import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImagePrinter {
public static void main(String[] args) {
/* load an image */
BufferedImage image;
try {
image = ImageIO.read(new File("C:\\path\\to\\your\\image.jpg"));
} catch (IOException e) {
e.printStackTrace();
return;
}
/* set up a print request attributes */
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
/* locate a print service that can handle the request */
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(DocFlavor.SERVICE_FORMATTED.PRINTABLE, pras);
if (printServices.length == 0) {
System.err.println("No suitable printers found.");
return;
}
/* set up a print job */
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintable(new ImagePrintable(printerJob, image));
printerJob.setPrintService(printServices[0]); // you may need to select a proper print service
/* print the image */
try {
printerJob.print(pras);
} catch (PrinterException e) {
e.printStackTrace();
}
}
static class ImagePrintable implements Printable {
private double x, y, width;
private int orientation;
private BufferedImage image;
ImagePrintable(PrinterJob printJob, BufferedImage image) {
PageFormat pageFormat = printJob.defaultPage();
this.x = pageFormat.getImageableX();
this.y = pageFormat.getImageableY();
this.width = pageFormat.getImageableWidth();
this.orientation = pageFormat.getOrientation();
this.image = image;
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
if (pageIndex != 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
g2d.translate(x, y);
g2d.drawImage(image, 0, 0, (int) Math.round(width), (int) Math.round(width * image.getHeight() / image.getWidth()), null);
return PAGE_EXISTS;
}
}
}