Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8255021

Graphics drawString with AffineTransform font, can't print to paper

XMLWordPrintable

    • 2d
    • x86_64
    • linux

      ADDITIONAL SYSTEM INFORMATION :
      JDK8 U261/LINUX

      A DESCRIPTION OF THE PROBLEM :
      1, Graphics drawString with normal font, can print to paper.
      2, Graphics drawString with AffineTransform font, can't print to paper.


      REGRESSION : Last worked in version 8u261

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      1, Use Eclipse run text code as Application, would popup a print dialog.
      2, Click OK to print.
      3, Check paper.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Hope there have text on paper.
      ACTUAL -
      No text on paper.

      ---------- BEGIN SOURCE ----------
      package taishan;

      import java.awt.Color;
      import java.awt.Font;
      import java.awt.Graphics;
      import java.awt.PrintJob;
      import java.awt.Toolkit;
      import java.awt.geom.AffineTransform;
      import java.awt.print.PageFormat;
      import java.awt.print.Printable;
      import java.awt.print.PrinterException;
      import java.util.Properties;

      import javax.swing.JFrame;

      @SuppressWarnings("serial")
      public class PrintFrame2 extends JFrame implements Printable
      {
          private final static AffineTransform CLOCKWISE_TX = AffineTransform.getRotateInstance( Math.PI / 2);
          private final static String FONT_NAME_SONGTI = "Dialog";
          private final static int FONT_SIZE = 30;

      private final static String TAISHAN = "Taishan Office";

      private final static int startX = 200;
      private final static int startY = 200;

      public PrintFrame2()
      {
      this.getContentPane().setBackground(Color.WHITE);

      Font font = new Font(FONT_NAME_SONGTI, 0, FONT_SIZE);
      font = font.deriveFont(CLOCKWISE_TX);
      this.setFont(font);
      }

      @Override
          public void paint(Graphics g)
          {
      super.paint(g);
      g.drawString(TAISHAN, startX, startY);
          }

      public void startPrint()
      {
      Toolkit kit = Toolkit.getDefaultToolkit();

      Properties props = new Properties();
      props.put("awt.print.printer", "durango");
      props.put("awt.print.numCopies", "1");
      PrintJob printJob = kit.getPrintJob(this, "Print Frame", props);

      Graphics g = printJob.getGraphics();
      this.paintAll(g);
      g.dispose();

      printJob.end();
      }
          
      @Override
          public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException
          {
              if (pageIndex > 0)
              {
                  return Printable.NO_SUCH_PAGE;
              }
              return Printable.PAGE_EXISTS;
          }

          public static void main(String[] args)
          {
           PrintFrame2 frame = new PrintFrame2();
              frame.setSize(1000, 600);
              frame.setVisible(true);
              
              frame.startPrint();
          }

      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      I resolved this problem.
      sun.print.PathGraphics
      {
          protected void drawString(String str, float x, float y,
                                    Font font, FontRenderContext frc, float w) {
              TextLayout layout =
                  new TextLayout(str, font, frc);
              Shape textShape =
                  layout.getOutline(AffineTransform.getTranslateInstance(x, y));
              fill(textShape);

              // !!! add this code would print it OK. !!!
             layout.draw(this, x, y);
          }

      }

      FREQUENCY : always


            prr Philip Race
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated: