QA@IT

Java7のdrawStringについて教えてください。

4555 PV

みなさまご教示下さい。

Windows7+Java7環境での動作についてです。以下のような印刷ロジックの場合、
BOLD指定した下2つの印字がJava5、Java6で印字したよりも横幅が大きくなってしまいます。
(Windows8.1+Java7も同様に大きくなってしまいます。)
これは仕様なのでしょうか?それともJavaの障害なのでしょうか?

恐れ入りますが、みなさまご教示下さい。よろしくお願い致します。

package sample;
import java.awt.print.*;
import java.awt.*;

public class Sample_005 {

public static void main(String[] args) {

  PrinterJob job = PrinterJob.getPrinterJob();
  Printable painter = new Printable() {
      public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) 
                                                               throws PrinterException {
          if(pageIndex > 0){
              return NO_SUCH_PAGE;
          }

        Graphics2D g = (Graphics2D) graphics;
        g.setColor(Color.GRAY);
        g.fillRect(200, 100, 200, 200);

        g.setColor(Color.BLACK);
        g.setFont(new Font("MS ゴシック",Font.PLAIN ,8));
        g.drawString("ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",200, 100);


        g.setColor(Color.BLACK);
        g.setFont(new Font("MS ゴシック",Font.PLAIN ,8));
        g.drawString("12345678901234567890123456789012345678901234567890",200, 150);

        g.setColor(Color.BLACK);
        g.setFont(new Font("MS ゴシック",Font.BOLD ,8));
        g.drawString("ABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFG",200, 200);

        g.setColor(Color.BLACK);
        g.setFont(new Font("MS ゴシック",Font.BOLD ,8));
        g.drawString("12345678901234567890123456789012345678901234567890",200, 250);

        return PAGE_EXISTS;
      }
  };
  job.setPrintable(painter);

  boolean print = job.printDialog();
  if(print){
      try {
        job.print();
    }
    catch (PrinterException e) {
        e.printStackTrace();
    }
  }     

}

}

回答

確認した訳ではなく単なる想像で申し訳ないですがおそらくは仕様ではないかと思います。もし不具合なのだとしても以前のバージョンと同じ結果となるように開発元であるOracleに要望を出してもすぐには対応されないように思えます。なぜならJava7がリリースされてからある程度の時間が経過しているからです。(現在Java7u67までアップデートされていますので...)

よってこの件について困っていること、どうしたいのかを添えて尋ねられた方がよいのではないでしょうか。例えば特定のユーザ(企業・部門)へ提供しているアプリケーションであればユーザのJREバージョンを合わせるように調整するなどが一つの解になるかも知れませんし、別の事情であればまた違った対応策があるかも知れません。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。