0

我有以下代码可以简单地打印二维码,但打印机会释放一个空白页。将文本添加到图形效果很好并且可以打印,但不是图像。如果我取消注释 ImageIO 部分,图像也会正确保存。

    private BufferedImage printImg;

    public Print(BufferedImage img) {
        try {
            this.printImg = img;

            // ask for print
            PrinterJob pjob = PrinterJob.getPrinterJob();
            if (pjob.printDialog() == false) return;
            pjob.setPrintable(this);

            //File f = new File("MyFile.png");
            //ImageIO.write(printImg, "PNG", f);

            pjob.print();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        if (page > 0)
            return NO_SUCH_PAGE;
        try {
            Graphics2D g2 = (Graphics2D) g;
            g2.drawImage(this.printImg, 0, 0, null);
        } catch (Exception e) {
            return NO_SUCH_PAGE;
        }
        return PAGE_EXISTS;
    }

原始图像是 RGBA 格式的 PNG,我是这样读的:

BufferedImage in = ImageIO.read(qr.file());
Print p = new Print(in);
4

1 回答 1

2

我认为问题可能是打印机的高分辨率(而不是屏幕)。因为图像是基于像素的。再加上不可打印的边距可能什么也没有。

下面应该显示一些东西

double x = pf.getImageableX();
double y = pf.getImageableY();
double w = pf.getImageableWidth();
double h = pf.getImageableHeight();
g2.drawImage(printImg, x, y, w, h, null);

从那里到真正的比例缩放是一个计算问题。您可能想设置RenderingHints.

于 2013-07-23T16:27:30.687 回答