72 lines
2.4 KiB
Java
72 lines
2.4 KiB
Java
import java.awt.Graphics;
|
|
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;
|
|
|
|
// Quelle: https://stackoverflow.com/questions/18404553/proper-way-of-printing-a-bufferedimage-in-java
|
|
|
|
public class PrintActionListener implements Runnable {
|
|
|
|
private BufferedImage image;
|
|
|
|
public PrintActionListener(BufferedImage image) {
|
|
this.image = image;
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
PrinterJob printJob = PrinterJob.getPrinterJob();
|
|
printJob.setPrintable(new ImagePrintable(printJob, image));
|
|
|
|
if (printJob.printDialog()) {
|
|
try {
|
|
printJob.print();
|
|
} catch (PrinterException prt) {
|
|
prt.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ImagePrintable implements Printable {
|
|
|
|
private double x, y, width;
|
|
|
|
private int orientation;
|
|
|
|
private BufferedImage image;
|
|
|
|
public 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;
|
|
}
|
|
|
|
@Override
|
|
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
|
|
throws PrinterException {
|
|
if (pageIndex == 0) {
|
|
int pWidth = 0;
|
|
int pHeight = 0;
|
|
if (orientation == PageFormat.PORTRAIT) {
|
|
pWidth = (int) Math.min(width, (double) image.getWidth());
|
|
pHeight = pWidth * image.getHeight() / image.getWidth();
|
|
} else {
|
|
pHeight = (int) Math.min(width, (double) image.getHeight());
|
|
pWidth = pHeight * image.getWidth() / image.getHeight();
|
|
}
|
|
g.drawImage(image, (int) x, (int) y, pWidth, pHeight, null);
|
|
return PAGE_EXISTS;
|
|
} else {
|
|
return NO_SUCH_PAGE;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|