Java的.无需缩放即可打印高分辨率图像

MyT*_*tle 2 java printing resolution image

我有一个列表,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))但这没有效果.

现在,我缩放我的图像以适应打印区域,但在缩放图像后,我的图像质量下降,因此打印的文档无法读取.

Tom*_*asz 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后

PrinterJob pj = PrinterJob.getPrinterJob();
...
PageFormat pf = ...;
...
pj.setPrintable(new MyPrintable(), pf);
Run Code Online (Sandbox Code Playgroud)

您仍然需要像以前一样设置分辨率.