public static void main(String args[]) {
ImagePrint i = new ImagePrint();
}
}
class ImageJPanel extends JPanel implements Printable {
int max_page = 1;
Image buffer = null;
public ImageJPanel() {
}
public void setBufferedImage(Image bi) {
if (bi == null)
return;
buffer = bi;
Dimension d = new Dimension(buffer.getWidth(this),
buffer.getHeight(this));
setPreferredSize(d);
revalidate();
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Dimension d = getSize();
g.setColor(getBackground());
g.fillRect(0, 0, d.width, d.height);
if (buffer != null)
g.drawImage(buffer, 0, 0, this);
}
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if (pageIndex >= max_page || buffer == null) {
return Printable.NO_SUCH_PAGE;
}
graphics.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY());
int v_page = (int) pageFormat.getImageableWidth();
int h_page = (int) pageFormat.getImageableHeight();
int x = buffer.getWidth(this);
int y = buffer.getHeight(this);
if (x == 0 || y == 0) {
return Printable.NO_SUCH_PAGE;
}
int nCol = Math.max((int) Math.ceil((double) x / v_page), 1);
int nRow = Math.max((int) Math.ceil((double) y / h_page), 1);
max_page = nCol * nRow;
int iCol = pageIndex % nCol;
int iRow = pageIndex / nCol;
int w = iCol * v_page;
int h = iRow * h_page;
int wImage = Math.min(v_page, x - w);
int hImage = Math.min(h_page, y - h);
graphics.drawImage(buffer, 0, 0, wImage, hImage,
w, h, w + x, y + hImage, this);