Printing Clipping Problem
I have tried to print the text strings, but I face the problem that was
came from the right text clipping. I search in google and found some
stubs related to my problem (this link below).
http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=4352983
It used to the bug in sun, but it shown everything were fixed in java
1.5 .
So, I tried to compile and run PrintingBug with jdk1.5.0_06 then the
problem still was. I not quite sure what I do wrong? or any mistake.
Because this bug shown that it was fixed.
Code:
import java.awt.*;
import java.awt.print.*;
import java.awt.geom.*;
import javax.swing.JFrame;
public class PrintingBug extends JFrame implements Printable {
int fontsNumber = 15;
Font [] fonts = new Font[fontsNumber];
Rectangle2D [] stringBounds = null;
String testString = "All work and no play makes Jack a dull boy.";
public PrintingBug () {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 0; i < fontsNumber; i++) {
fonts[i] = new Font( "SansSerif", Font.PLAIN, 5+i );
}
}
public int print( Graphics _g, PageFormat pf, int pageIndex ) {
if ( pageIndex > 0 ) {
return NO_SUCH_PAGE;
}
Graphics2D g = (Graphics2D) _g;
g.translate( pf.getImageableX( ), pf.getImageableY( ) );
paint(g);
return Printable.PAGE_EXISTS;
}
public void paint(Graphics g) {
super.paint(g);
if (stringBounds == null) {
stringBounds = new Rectangle2D[fontsNumber];
for (int i = 0; i < fontsNumber; i++) {
stringBounds[i] =
g.getFontMetrics(fonts[i]).getStringBounds(testString,g);
}
}
g.setColor(Color.black);
Insets insets = getInsets();
g.translate(insets.left,insets.top);
for (int i = 0; i < fontsNumber; i++) {
g.translate(0,10);
g.drawRect(0,0,(int)stringBounds[i].getWidth(),(int)stringBounds[i].getHeight());
g.translate(0,(int)stringBounds[i].getHeight());
g.setFont(fonts[i]);
g.drawString(testString,0,0);
System.out.println(g.getFontMetrics().getStringBounds(testString,g));
}
}
public void doPrint() {
PrinterJob pj = PrinterJob.getPrinterJob( );
pj.setPrintable( this );
if( pj.printDialog( ) ) {
try {
pj.print( );
}
catch( PrinterException ee ) {
System.out.println( ee );
}
}
}
public static void main(String[] args) {
PrintingBug printingBug = new PrintingBug();
printingBug.setSize(400,600);
printingBug.show();
printingBug.doPrint();
}
}
Thanks in advance.
--------------------