修改完善二维码生成,增加内容文字;可能二维码内容与打印的文字不一样

This commit is contained in:
jkcdev 2025-05-27 10:53:44 +08:00
parent eb92b93845
commit 5c4c7e74ff
2 changed files with 9 additions and 5 deletions

View File

@ -167,11 +167,11 @@ public class EbikeOperateSystemInfoController {
* @return
*/
@PostMapping("ebikeQrCodeGenerate")
public JsonResult<?> ebikeQrGenerate(@RequestParam(name = "content") String content) {
public JsonResult<?> ebikeQrGenerate(@RequestParam(name = "content") String content, @RequestParam(name = "text") String text) {
if (content == null || content.isEmpty()) {
return JsonResult.failed("二维码内容不能为空");
}
return JsonResult.success(QRGenUtil.generateQRCodeBase64(content));
return JsonResult.success(QRGenUtil.generateQRCodeBase64(content, text));
}
/**

View File

@ -25,9 +25,10 @@ public class QRGenUtil {
* <p>增加内容文字
*
* @param content 二维码内容
* @param text 文字内容
* @return Base64编码的二维码
*/
public static String generateQRCodeBase64(String content) {
public static String generateQRCodeBase64(String content, String text) {
// 1. 生成基础二维码
try (ByteArrayOutputStream qrStream = QRCode.from(content)
.withSize(300, 300)
@ -35,6 +36,9 @@ public class QRGenUtil {
.withErrorCorrection(ErrorCorrectionLevel.H) // 纠错等级H为最高
.to(ImageType.PNG) // 输出格式
.stream()) {
if(text == null || text.isEmpty()){
return Base64.getEncoder().encodeToString(qrStream.toByteArray());
}
// 2. 将二维码转换为 BufferedImage
ByteArrayInputStream inputStream = new ByteArrayInputStream(qrStream.toByteArray());
@ -53,12 +57,12 @@ public class QRGenUtil {
g2d.setColor(Color.BLACK);
// 计算文字位置底部居中
int textWidth = g2d.getFontMetrics().stringWidth(content);
int textWidth = g2d.getFontMetrics().stringWidth(text);
int x = (qrImage.getWidth() - textWidth) / 2;
int y = qrImage.getHeight() - 2; // 底部留白
// 添加文字说明
g2d.drawString(content, x, y);
g2d.drawString(text, x, y);
g2d.dispose();
// 使用 Java 8+ Base64 编码避免自动换行问题