在Java中打印BufferedImage的正确方法

我想知道是否有一种在Java中打印BufferedImage的正确方法。 基本上我已经创建了一个工作正常的照片处理程序,我可以保存图像等。但我的真正目标是将其发送到打印机软件,以便您可以选择要打印的页面数量和页面类型。

所以我的缩短问题是,如何将缓冲的图像发送到打印机,以便弹出打印机选择屏幕等,然后才能打印?

如果有人能告诉我这方面的一个例子,我将不胜感激。

这是我的一个Java项目中的一个。 此代码将在打印机页面上缩放和打印一个图像。

你这样称呼它:

  printButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent event) { //Start a Thread new Thread(new PrintActionListener(image)).start(); } }); 

这是Runnable:

 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; 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; } } } }