package org.jeecg.modules.tms.utils; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import liquibase.pro.packaged.S; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import java.awt.print.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.*; @RestController @RequestMapping("/tms/qyCode") @Slf4j public class QrCodePrinterUtils{ @GetMapping("/generate") public Result> generateQrCode() throws Exception { String content = "Q201204330002-0001"; // 生成二维码图片(Base64) ByteArrayOutputStream os = new ByteArrayOutputStream(); generateQRCodeImage(content, 200, 200, os); String base64Img = "data:image/png;base64," + Base64.getEncoder().encodeToString(os.toByteArray()); // 返回结果 Map result = new HashMap<>(); result.put("image", base64Img); result.put("content", content); return Result.OK(result); } public static void generateQRCodeImage(String text, int width, int height, OutputStream os) throws Exception { QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height); MatrixToImageWriter.writeToStream(bitMatrix, "PNG", os); } public static String generateBacthQRCode(String content, int width, int height) { try { Map hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.MARGIN, 1); BitMatrix matrix = new MultiFormatWriter().encode( content, BarcodeFormat.QR_CODE, width, height, hints ); ByteArrayOutputStream os = new ByteArrayOutputStream(); MatrixToImageWriter.writeToStream(matrix, "PNG", os); return "data:image/png;base64," + Base64.getEncoder().encodeToString(os.toByteArray()); } catch (Exception e) { throw new RuntimeException("生成二维码失败", e); } } @GetMapping("/batchGenerate") public Result>> generateBatchQrCode(){ List> results = new ArrayList<>(); List contentList = new ArrayList<>(); contentList.add("Q201204330002-0001"); contentList.add("Q201204330002-0002"); contentList.add("Q201204330002-0003"); for(String content : contentList){ Map result = new HashMap<>(); result.put("content",content); result.put("image",generateBacthQRCode(content, 200, 200)); // 生成二维码图片(Base64) results.add(result); } return Result.OK(results); } }