【问题标题】:Java. Printing high-resolution image without scaling爪哇。无需缩放即可打印高分辨率图像
【发布时间】:2012-08-25 08:14:04
【问题描述】:

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

目前,我缩放图像以适合打印区域,但缩放图像后质量下降,因此打印的文档不可读。

【问题讨论】:

  • 你能告诉我们你正在使用什么版本的java
  • 请不要不要如此彻底地编辑您的问题。这对那些已经回答的人来说是不公平的,这也不是 Stack Overflow 的工作方式。如果您有新问题,请提出新问题。
  • 当 PrinterJob 不支持该分辨率时,设置 PrintResolution 会失败。

标签: java image printing resolution


【解决方案1】:

你可以使用drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver 观察者)

参数 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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多