2

リストがjava.awt.Imageあり、それぞれの解像度は 300 DPI です。それらを印刷したいのですが、( javax.PrintService API を使用して) この画像の印刷を開始すると、Java の Print/3D クラスはデフォルトで 72DPI (画像の 300 DPI に対して) を使用するため、画像の一部のみが印刷されます。しかし、72 DPI (Java のデフォルトと同じ解像度) の画像を使用すると、すべての画像が正常に印刷されます (画像の一部だけでなく、画像全体を印刷する場合)。

質問: 画像の印刷解像度を印刷領域に合わせて設定するにはどうすればよいですか?

設定しようとしましPrintRequestAttributeSet.add( new PrinterResolution(300, 300, ResolutionSyntax.DPI))たが、これは効果がありません。

今のところ、印刷領域に合わせて画像をスケーリングしますが、画像をスケーリングした後は品質が低下するため、印刷されたドキュメントは判読できません。

4

1 に答える 1

7

drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) を使用できます

パラメーター dx1、dy1、dx2、および dy2 は、画像が収まる必要がある境界を定義します。いくつかの計算を行う必要があります。これにより、その座標に高品質の画像が印刷されます(縮小せずに)。

class MyPrintable implements Printable {
  public int print(Graphics g, PageFormat pf, int pageIndex) {
    if (pageIndex != 0) return NO_SUCH_PAGE;

    Graphics2D g2 = (Graphics2D) g;
    g2.printImage(....);
    return PAGE_EXISTS;
  }
}

それで

PrinterJob pj = PrinterJob.getPrinterJob();
...
PageFormat pf = ...;
...
pj.setPrintable(new MyPrintable(), pf);

以前と同じように解像度を設定する必要があります。

于 2013-04-15T05:23:51.850 に答える