Microsoft KB Archive/182623

= FIX: PrintJob Output is Incorrect After First Page =

Article ID: 182623

Article Last Modified on 7/23/2001

-

APPLIES TO


 * Microsoft Java Virtual Machine

-



This article was previously published under Q182623



SYMPTOMS
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.



CAUSE
This problem happens with some printer drivers depending on whether the driver resets state between pages.



STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are 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.



Steps to Reproduce the Font and Graphic Attribute Issue
Create a Java Application and include the following class: 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.

A workaround for the translation accumulation issue is to get your current translation and set the translation to the inverted values: 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: kbbug kbfix kbsdkjava300fix kbsdkjava310fix KB182623

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.