package org.jeecg.modules.tms.utils; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import java.awt.print.*; import java.awt.image.BufferedImage; import java.awt.*; public class QrCodePrinterUtils implements Printable { private final BufferedImage image; public QrCodePrinterUtils(BufferedImage image) { this.image = image; } /** * 打印二维码 */ public void print() { PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(this); // 弹出打印对话框(可选) if (job.printDialog()) { try { job.print(); } catch (PrinterException e) { System.err.println("打印失败: " + e.getMessage()); } } } /** * 实现 Printable 接口的打印方法 */ @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) { if (pageIndex > 0) { return NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D) graphics; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); // 计算居中坐标 double pageWidth = pageFormat.getImageableWidth(); double pageHeight = pageFormat.getImageableHeight(); double imgWidth = image.getWidth(); double imgHeight = image.getHeight(); double scale = Math.min(pageWidth / imgWidth, pageHeight / imgHeight); g2d.scale(scale, scale); g2d.drawImage(image, 0, 0, null); return PAGE_EXISTS; } /** * 使用默认打印机打印,不弹对话框 */ public static void noDialogPrint(){ BufferedImage qrImage = QrCodeUtils.generateQrCode("Silent Print", 300, 300); QrCodePrinterUtils printer = new QrCodePrinterUtils(qrImage); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(printer); try { job.print(); } catch (PrinterException e) { e.printStackTrace(); } } }