一个打印的类
import javax.swing.*;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.ActionEvent;public class ImagePrint extends JFrame {
ImageJPanel image;
Image icon; public ImagePrint() {
super("ImagePrint");
setSize(400, 400);
icon = Toolkit.getDefaultToolkit().getImage("meng.jpg");
image = new ImageJPanel();
image.setBufferedImage(icon); JButton button = new JButton("Print");
getContentPane().add(image, BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.SOUTH);
Action action = new AbstractAction() {
public void actionPerformed(ActionEvent ea) {
printIamge();
}
};
button.addActionListener(action);
setVisible(true); } public void printIamge() {
try {
PrinterJob print = PrinterJob.getPrinterJob();
print.setPrintable(image);
if (print.printDialog()) {
print.print(); } else {
return;
}
} catch (Exception e) {
System.out.println(e);
} } 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); System.gc();
return Printable.PAGE_EXISTS;
}
}
import javax.swing.*;
import java.awt.print.Printable;
import java.awt.print.PrinterJob;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.ActionEvent;public class ImagePrint extends JFrame {
ImageJPanel image;
Image icon; public ImagePrint() {
super("ImagePrint");
setSize(400, 400);
icon = Toolkit.getDefaultToolkit().getImage("meng.jpg");
image = new ImageJPanel();
image.setBufferedImage(icon); JButton button = new JButton("Print");
getContentPane().add(image, BorderLayout.CENTER);
getContentPane().add(button, BorderLayout.SOUTH);
Action action = new AbstractAction() {
public void actionPerformed(ActionEvent ea) {
printIamge();
}
};
button.addActionListener(action);
setVisible(true); } public void printIamge() {
try {
PrinterJob print = PrinterJob.getPrinterJob();
print.setPrintable(image);
if (print.printDialog()) {
print.print(); } else {
return;
}
} catch (Exception e) {
System.out.println(e);
} } 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); System.gc();
return Printable.PAGE_EXISTS;
}
}
解决方案 »
- 关于在命令行下不识别javac命令的问题
- 各位大侠帮个忙
- 郁闷。没办法只能请教了
- 问题!
- 有关开发和运行环境的问题
- ☆■■ 关于JComboBox和JEditorPane ■■☆
- 请问:在游戏中,对场景(或者叫背景)的浏览是怎么做的。比如在“红警”中有很多的地图,我们可以通过鼠标来遍历它,这个地图在程序中是
- java中实现word文档的打开
- 当用executeQuery("..")返回一ResultSet结果集,那么ResultSet存在于什么地方?是在内存里面吗?
- 大家救我啊!
- 怎样实现文件传输功能
- (关于c/s问题)各位高手我写了c/s结构的程序,Server是采用Java写的,Client是采用VC写的,详情请进来看看!
感谢!