//这是我找到的一个打印预览的类,不知有用否。
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import javax.swing.JComponent;
public class PrintPreview extends JComponent { public static int PAGE_RESOLUTION = 72;
Pageable pageable;
int currentPage;
BufferedImage image; public PrintPreview(Pageable pageable) {
this.pageable = pageable;
currentPage = 0;
indexUpdated();
} public int getCurrentPage() {
return currentPage;
} public int getNumberOfPages() {
return pageable.getNumberOfPages();
} public Dimension getPreferredSize() {
Dimension pageSize = new Dimension((int)((double)PAGE_RESOLUTION * 8.5D), PAGE_RESOLUTION * 11);
PageFormat format = pageable.getPageFormat(currentPage);
if(format.getOrientation() == 0) {
int t = pageSize.width;
pageSize.width = pageSize.height;
pageSize.height = t;
}
return pageSize;
} public void indexUpdated() {
Dimension size = new Dimension((int)((double)PAGE_RESOLUTION * 8.5D), PAGE_RESOLUTION * 11);
PageFormat format = pageable.getPageFormat(currentPage);
Printable printable = pageable.getPrintable(currentPage);
Paper paper = new Paper();
if(format.getOrientation() == 0) {
int t = size.width;
size.width = size.height;
size.height = t;
}
paper.setImageableArea(0.0D, 0.0D, size.width, size.height);
paper.setSize(size.width, size.height);
PageFormat pf = (PageFormat)format.clone();
if(image == null || image.getWidth() != size.width || image.getHeight() != size.height)
image = new BufferedImage(size.width, size.height, 1);
java.awt.Graphics2D g2D = image.createGraphics();
g2D.setColor(Color.white);
g2D.fillRect(0, 0, size.width, size.height);
g2D.setColor(Color.lightGray);
g2D.drawRect((int)pf.getImageableX(), (int)pf.getImageableY(), (int)pf.getImageableWidth(), (int)pf.getImageableHeight());
g2D.setColor(Color.black);
g2D.setClip((int)pf.getImageableX(), (int)pf.getImageableY(), (int)pf.getImageableWidth(), (int)pf.getImageableHeight());
try {
printable.print(g2D, pf, currentPage);
}
catch(Exception e) {
e.printStackTrace();
g2D.setColor(Color.red);
g2D.drawLine(0, 0, size.width, size.height);
g2D.drawLine(size.width, 0, 0, size.height);
}
g2D.finalize();
image.flush();
repaint();
} public void paint(Graphics g) {
if(image == null)
indexUpdated();
Dimension size = getSize();
g.drawImage(image, 0, 0, size.width, size.height, null);
} public void setCurrentPage(int index) {
if(index >= 0 && index < pageable.getNumberOfPages()) {
currentPage = index;
indexUpdated();
repaint();
}
}
}
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.print.*;
import javax.swing.JComponent;
public class PrintPreview extends JComponent { public static int PAGE_RESOLUTION = 72;
Pageable pageable;
int currentPage;
BufferedImage image; public PrintPreview(Pageable pageable) {
this.pageable = pageable;
currentPage = 0;
indexUpdated();
} public int getCurrentPage() {
return currentPage;
} public int getNumberOfPages() {
return pageable.getNumberOfPages();
} public Dimension getPreferredSize() {
Dimension pageSize = new Dimension((int)((double)PAGE_RESOLUTION * 8.5D), PAGE_RESOLUTION * 11);
PageFormat format = pageable.getPageFormat(currentPage);
if(format.getOrientation() == 0) {
int t = pageSize.width;
pageSize.width = pageSize.height;
pageSize.height = t;
}
return pageSize;
} public void indexUpdated() {
Dimension size = new Dimension((int)((double)PAGE_RESOLUTION * 8.5D), PAGE_RESOLUTION * 11);
PageFormat format = pageable.getPageFormat(currentPage);
Printable printable = pageable.getPrintable(currentPage);
Paper paper = new Paper();
if(format.getOrientation() == 0) {
int t = size.width;
size.width = size.height;
size.height = t;
}
paper.setImageableArea(0.0D, 0.0D, size.width, size.height);
paper.setSize(size.width, size.height);
PageFormat pf = (PageFormat)format.clone();
if(image == null || image.getWidth() != size.width || image.getHeight() != size.height)
image = new BufferedImage(size.width, size.height, 1);
java.awt.Graphics2D g2D = image.createGraphics();
g2D.setColor(Color.white);
g2D.fillRect(0, 0, size.width, size.height);
g2D.setColor(Color.lightGray);
g2D.drawRect((int)pf.getImageableX(), (int)pf.getImageableY(), (int)pf.getImageableWidth(), (int)pf.getImageableHeight());
g2D.setColor(Color.black);
g2D.setClip((int)pf.getImageableX(), (int)pf.getImageableY(), (int)pf.getImageableWidth(), (int)pf.getImageableHeight());
try {
printable.print(g2D, pf, currentPage);
}
catch(Exception e) {
e.printStackTrace();
g2D.setColor(Color.red);
g2D.drawLine(0, 0, size.width, size.height);
g2D.drawLine(size.width, 0, 0, size.height);
}
g2D.finalize();
image.flush();
repaint();
} public void paint(Graphics g) {
if(image == null)
indexUpdated();
Dimension size = getSize();
g.drawImage(image, 0, 0, size.width, size.height, null);
} public void setCurrentPage(int index) {
if(index >= 0 && index < pageable.getNumberOfPages()) {
currentPage = index;
indexUpdated();
repaint();
}
}
}
http://manning.spindoczine.com/sbe/
第22章(记不太清了。)有专门的printpreview问题的解答。
代码以mail给你了。