FIX: PrintJob Output is Incorrect After First PageID: Q182623
|
When printing text or graphics from Java using java.awt.PrintJob, the
output has different font sizes, line thickness', and other Graphics
attributes on different pages even when the same Graphic attributes and
fonts are used on all pages.
Also, subsequent pages do not reset the offset from a previous translate()
call. For example, if your paint() routine calls gr.translate(10,10), then
the first page printed starts at origin (10,10), the second page starts at
origin (20,20) and so on.
This problem happens with some printer drivers depending on whether the driver resets state between pages.
Microsoft has confirmed this to be a bug in the Microsoft products listed
at the beginning of this article.
This bug was corrected in the Microsoft virtual machine contained in the SDK for Java 3.0 and later.
import java.awt.*;
import com.ms.ui.*;
public class PrintFont extends UIFrame
{
public PrintFont()
{
PrintJob pj = getToolkit().getPrintJob(null, "Printer", null);
if (pj != null)
{
for (int i=1; i<=3; i++)
{
Graphics pg = pj.getGraphics();
if (pg != null)
{
pg.setFont(new Font("TimesRoman", Font.PLAIN, 16));
pg.setColor(Color.black);
pg.drawRect(100, 100, 100, 100);
pg.drawString("Page " + i, 600, 900);
pg.drawString("TimesRoman", 500, 900);
}
System.out.println("Dispose");
pg.dispose();
}
pj.end();
System.out.println("End");
}
}
public static void main(String args[])
{
UIFrame f = new PrintFont();
System.exit(0);
}
}
A workaround for this problem is to select a different attribute
(font/color) and do a drawString of an empty string, then select back in
the desired attribute.
try {
com.ms.awt.GraphicsX gx = (com.ms.awt.GraphicsX) printGraphics;
Point pt = gx.getTranslation();
gx.translate(-pt.x, -pt.y);
} catch (Exception e) {
}
Additional query words: print font
Keywords : kbSDKJava300fix kbDSupport JVM kbSDKJava310fix
Version : WINDOWS:1.1,2.0,2.01
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: July 26, 1999