我使用 PrinterJob 对象来打印我的 Bufferedimage,我有一个 BufferedImage,我对其进行处理并将其发送到具有纸张格式等的打印机作业,但我无法使其适合我的卡片打印机。当我将它保存到我的硬盘并通过 Windows 打印管理器打印时,它在我的卡片打印机上打印得非常好,但是使用 PrinterJob 它变得太大并且不适合卡片
卡的大小是 86X54mm,我的缓冲图像的大小是 1300x816px 代码:
PrinterJob printjob = PrinterJob.getPrinterJob();
printjob.setJobName("CardPrint");
Printable printable = new Printable() {
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum > 0) {
return Printable.NO_SUCH_PAGE;
}
JLayeredPane j1 = new JLayeredPane();
Dimension size = j1.getSize();
j1.print(bi.getGraphics());
Graphics2D g2 = (Graphics2D) pg;
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.drawImage(bi, 0, 0, (int) pf.getWidth(), (int) pf.getHeight(), null);
return Printable.PAGE_EXISTS;
}
};
Paper paper = new Paper();
paper.setImageableArea(0, 0, 0, 0);
paper.setSize(1.15, 0.72);
PageFormat format = new PageFormat();
format.setPaper(paper);
printjob.setPrintable(printable, format);
try {
printjob.printDialog();
printjob.print();
} catch (Exception eee){
System.out.println("NO PAGE FOUND."+eee.toString());
}
我发现 paper.setSize(1.15, 0.7); 以英寸为单位 ( http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/print/Paper.html ) paper.setImageableArea(0, 0, 0, 0); 我不知道这个 setImageableArea。
有没有人知道当前的尺寸,我计算错误了吗?谢谢。