扫描二维码之后跳转指定页面;
1、引入依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version>
</dependency>
2、 直接上代码
package com.laojiu.vueblog;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
public class QRCodeGenerator {
public static void main(String[] args) {
String name = "老旧";
String address = "上海市黄浦区人民广场中山北路325号华为国际品牌科技电脑";
String idCard = "XC202312231230";
String riqi = "2023年12月23日 13:30";
String leixing = "华硕电脑麒麟3000Y系列笔记本";
String outputPath = "F:/companyFile/temp/img/二维码"+System.currentTimeMillis()+".jpg";
String data = "https://www.douyin.com?testId=89746543214&idCard="+idCard;
try {
generateQRCodeWithText(data, name, address, idCard,riqi,leixing, outputPath);
System.out.println("生成图片完毕.");
} catch (IOException | WriterException e) {
e.printStackTrace();
}
}
private static void generateQRCodeWithText(String data, String name, String address, String idCard,String riqi, String leixing, String outputPath)
throws IOException, WriterException {
int qrCodeSize = 200; // 二维码大小
// 生成二维码
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = qrCodeWriter.encode(data, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hints);
// 创建图片
BufferedImage image = new BufferedImage(qrCodeSize + 300, qrCodeSize, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
// 填充白色背景
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
// 绘制二维码
for (int x = 0; x < qrCodeSize; x++) {
for (int y = 0; y < qrCodeSize; y++) {
int color = bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB();
image.setRGB(x, y, color);
}
}
// 绘制文本信息
graphics.setColor(Color.BLACK);
Font font = new Font("宋体", Font.PLAIN, 14);
font.deriveFont(Font.BOLD);
graphics.setFont(font);
int textX = qrCodeSize + 10;
int textY = 40;
int maxLen=15;
graphics.drawString("姓名: " + truncateString(name,maxLen), textX, textY);
graphics.drawString("地址: " + truncateString(address,maxLen), textX, textY + 30);
graphics.drawString("资产编号: " + idCard, textX, textY + 60);
graphics.drawString("申请时间: " + riqi, textX, textY + 90);
graphics.drawString("资产名称: " + truncateString(leixing,maxLen), textX, textY + 120);
// 保存图片
ImageIO.write(image, "png", new File(outputPath));
graphics.dispose();
}
private static String truncateString(String input, int maxLength) {
if (input.length() > maxLength) {
int endIndex = Math.min(maxLength, input.length());
return input.substring(0, endIndex) + "...";
} else {
return input;
}
}
}