用Java打印BuffereImage时的空白页
我有以下代码来简单地打印二维码,但打印机会释放一个空白页。向图形中添加文本效果很好,可以打印,但不能打印图像。如果取消对ImageIO部分的注释,图像也会正确保存用Java打印BuffereImage时的空白页,java,printing,bufferedimage,Java,Printing,Bufferedimage,我有以下代码来简单地打印二维码,但打印机会释放一个空白页。向图形中添加文本效果很好,可以打印,但不能打印图像。如果取消对ImageIO部分的注释,图像也会正确保存 private BufferedImage printImg; public Print(BufferedImage img) { try { this.printImg = img; // ask for print Prin
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);
我认为问题可能是打印机的高分辨率(相对于屏幕)。 因为图像是基于像素的。再加上无法打印的边距,可能什么也看不出来 下面应该说明一些事情
double x = pf.getImageableX();
double y = pf.getImageableY();
double w = pf.getImageableWidth();
double h = pf.getImageableHeight();
g2.drawImage(printImg, x, y, w, h, null);
从这里到实际比例缩放是一个计算问题。
您可能希望设置
渲染提示
,以便更快地获得更好的帮助,请发布一个。您曾经使用过它吗?如果是,如何使用?