使用按钮在打印机中打印jLabel的图标

我有一个带有Icon的jLabel,我想用打印机(canon,hp,epson)打印一个按钮。 我怎样才能做到这一点? 任何有用的代码? 代码段? 链接? 我只能看到这样: 如何在java中打印标签的内容?

但这不是我想要的。 我正在使用netbeans提前谢谢。

基本上,答案取决于标签是否显示在屏幕上。 为确保标签(或实际上是任何组件)可以打印,首先必须正确尺寸…

这可以使用setSize完成,并在最基本的级别上提供getPreferredSize

下一步是使用组件printAll方法(或print方法,取决于您的需要),这更适合…打印…因为它禁用双缓冲,并且当它没有附加到本机时不会产生讨厌的exception同行…

打印为首选尺寸的示例…

正常

打印示例以填充可用区域…

填充

现在这个例子使用printComponentToFile方法,但你想要使用printComponent方法实际打印一台打印机,第一个方法对于页面预览和屏幕转储这样的事情很有用……

 import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; public class PrintALabel { public static void main(String[] args) { try { JLabel label = new JLabel( "This is a test", new ImageIcon("path/to/image"), JLabel.CENTER); printComponentToFile(label, true); printComponentToFile(label, false); } catch (PrinterException exp) { exp.printStackTrace(); } } public static void printComponent(JComponent comp, boolean fill) throws PrinterException { PrinterJob pjob = PrinterJob.getPrinterJob(); PageFormat pf = pjob.defaultPage(); pf.setOrientation(PageFormat.LANDSCAPE); PageFormat postformat = pjob.pageDialog(pf); if (pf != postformat) { //Set print component pjob.setPrintable(new ComponentPrinter(comp, fill), postformat); if (pjob.printDialog()) { pjob.print(); } } } public static void printComponentToFile(Component comp, boolean fill) throws PrinterException { Paper paper = new Paper(); paper.setSize(8.3 * 72, 11.7 * 72); paper.setImageableArea(18, 18, 559, 783); PageFormat pf = new PageFormat(); pf.setPaper(paper); pf.setOrientation(PageFormat.LANDSCAPE); BufferedImage img = new BufferedImage( (int) Math.round(pf.getWidth()), (int) Math.round(pf.getHeight()), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = img.createGraphics(); g2d.setColor(Color.WHITE); g2d.fill(new Rectangle(0, 0, img.getWidth(), img.getHeight())); ComponentPrinter cp = new ComponentPrinter(comp, fill); try { cp.print(g2d, pf, 0); } finally { g2d.dispose(); } try { ImageIO.write(img, "png", new File("Page-" + (fill ? "Filled" : "") + ".png")); } catch (IOException ex) { ex.printStackTrace(); } } public static class ComponentPrinter implements Printable { private Component comp; private boolean fill; public ComponentPrinter(Component comp, boolean fill) { this.comp = comp; this.fill = fill; } @Override public int print(Graphics g, PageFormat format, int page_index) throws PrinterException { if (page_index > 0) { return Printable.NO_SUCH_PAGE; } Graphics2D g2 = (Graphics2D) g; g2.translate(format.getImageableX(), format.getImageableY()); double width = (int) Math.floor(format.getImageableWidth()); double height = (int) Math.floor(format.getImageableHeight()); if (!fill) { width = Math.min(width, comp.getPreferredSize().width); height = Math.min(height, comp.getPreferredSize().height); } comp.setBounds(0, 0, (int) Math.floor(width), (int) Math.floor(height)); if (comp.getParent() == null) { comp.addNotify(); } comp.validate(); comp.doLayout(); comp.printAll(g2); if (comp.getParent() != null) { comp.removeNotify(); } return Printable.PAGE_EXISTS; } } }