java printerjob打印_java – 使用PrinterJob打印图像(Graphics2D)

这篇博客介绍了一个Java程序,该程序实现了一个`TestPrint`类,用于使用`PrinterJob`打印图像。程序首先读取指定路径的图像文件,然后创建一个`PageFormat`并设置纸张尺寸。接着,它创建一个`BufferedImage`并在其中绘制图像,并使用`Graphics2D`调整裁剪区域以适应打印机的可打印区域。最后,通过调用`print`方法将图像发送到打印机。代码还包含一个展示如何在屏幕上预览打印内容的部分。
摘要由CSDN通过智能技术生成

基本上,您希望创建自己可以绘制的图形上下文.您还需要构建一个可以通过print方法的PageFormat.

public class TestPrint implements Printable {

private BufferedImage background;

public static final float DPI = 72;

public static void main(String[] args) {

new TestPrint();

}

public TestPrint() {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception ex) {

}

try {

background = ImageIO.read(new File("C:/Users/shane/Dropbox/MegaTokyo/MgkGrl_Yuki_by_fredrin.jpg"));

} catch (IOException ex) {

ex.printStackTrace();

}

float width = cmToPixel(21f, DPI);

float height = cmToPixel(29.7f, DPI);

Paper paper = new Paper();

float margin = cmToPixel(1, DPI);

paper.setImageableArea(margin, margin, width - (margin * 2), height - (margin * 2));

PageFormat pf = new PageFormat();

pf.setPaper(paper);

BufferedImage img = new BufferedImage(Math.round(width), Math.round(height), BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = img.createGraphics();

g2d.setColor(Color.WHITE);

g2d.fill(new Rectangle2D.Float(0, 0, width, height));

try {

g2d.setClip(new Rectangle2D.Double(pf.getImageableX(), pf.getImageableY(), pf.getImageableWidth(), pf.getImageableHeight()));

print(g2d, pf, 0);

} catch (PrinterException ex) {

ex.printStackTrace();

}

g2d.dispose();

JFrame frame = new JFrame("Test");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.add(new JLabel(new ImageIcon(img)));

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

});

}

public float cmToPixel(float cm, float dpi) {

return (dpi / 2.54f) * cm;

}

public int print(Graphics graphics, PageFormat pageFormat, int page) throws PrinterException {

if (page > 0) {

return NO_SUCH_PAGE;

}

Graphics2D g = (Graphics2D) graphics;

g.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

if (background != null) {

int x = (int)Math.round((pageFormat.getImageableWidth() - background.getWidth()) / 2f);

int y = (int)Math.round((pageFormat.getImageableHeight() - background.getHeight()) / 2f);

g.drawImage(background, x, y, null);

}

g.setColor(Color.BLACK);

g.draw(new Rectangle2D.Double(0, 0, pageFormat.getImageableWidth() - 1, pageFormat.getImageableHeight() - 1));

return PAGE_EXISTS;

}

}

现在,显然,打印到屏幕上的内容和打印到打印机的内容会有所不同,因为我们实际上并没有使用相同的硬件设备,但基本概念适用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值