Browse Source

修改条形码生成功能

lwx_dev
erdanergou 3 years ago
parent
commit
ae197c86fd
  1. 4
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  2. 2
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  3. 2
      src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java
  4. 128
      src/main/java/com/dreamchaser/depository_manage/utils/CreateQrCodeUtil.java
  5. 2
      src/main/resources/templates/pages/user/login.html
  6. 2
      src/main/resources/templates/pages/warehouse/warehouse_view.html
  7. 151
      src/test/java/com/dreamchaser/depository_manage/TestOther.java

4
src/main/java/com/dreamchaser/depository_manage/controller/UserController.java

@ -183,9 +183,7 @@ public class UserController {
}else{
return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE;
}
/*UserToken userToken = new UserToken(LoginType.getType(map.get("loginType"))
, map.get("principal"), map.get("credentials"));
return login(userToken);*/
}
/**
* 将生成的令牌拿去认证如果认证成功则返回带有token凭证响应否则返回用户密码错误的响应

2
src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java

@ -35,6 +35,8 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
UserByPort userByPort = (UserByPort) session.getAttribute("userToken");
if(userByPort!=null){
token = (String) session.getAttribute("token"+userByPort.getId());
}else{
token = request.getHeader("user-token");
}
//如果是访问logout则删除对应的令牌
if ("/loginOut".equals(request.getServletPath())){

2
src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java

@ -91,7 +91,7 @@ public class RestResponse implements Serializable {
*/
public static RestResponse CreateBarCode(String context) throws IOException {
// 生成base64类型图片
String qrCode = CreateQrCodeUtil.CreateBarCode128(context, 50, 200);
String qrCode = CreateQrCodeUtil.CreateBarCode128(context, 52, 200);
Map<String,String> result = new HashMap<>();
result.put("qrCode",qrCode);
result.put("codeValue",context);

128
src/main/java/com/dreamchaser/depository_manage/utils/CreateQrCodeUtil.java

@ -14,13 +14,16 @@ import com.google.zxing.pdf417.encoder.BarcodeMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.http.util.TextUtils;
import org.junit.jupiter.api.Test;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -85,22 +88,10 @@ public class CreateQrCodeUtil {
public static String CreateBarCode128(String content, int height, int width){
String resultImage = "";
if (!StringUtils.isEmpty(content)) {
ServletOutputStream stream = null;
BufferedImage image = insertWords(getBarCode(content,width,height), content,width,height,80);
ByteArrayOutputStream os = new ByteArrayOutputStream();
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定字符编码为“utf-8”
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定二维码的纠错等级为中级
hints.put(EncodeHintType.MARGIN, 2); // 设置图片的边距
Code128Writer writer = new Code128Writer();
BitMatrix bitMatrix = null;
try {
bitMatrix = writer.encode(content, BarcodeFormat.CODE_128, width, height,hints);
} catch (WriterException e) {
e.printStackTrace();
}
BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
try {
ImageIO.write(bufferedImage, "png", os);
ImageIO.write(image, "png", os);
} catch (IOException e) {
e.printStackTrace();
}
@ -115,6 +106,115 @@ public class CreateQrCodeUtil {
/**
* 设置 条形码参数
*/
public Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
public static final long serialVersionUID = 1L;
{
// 设置编码方式
put(EncodeHintType.CHARACTER_SET, "utf-8");
// 容错级别 这里选择最高H级别
put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
put(EncodeHintType.MARGIN, 1);
}
};
/**
* 生成 图片缓冲
*
* @param vaNumber VA
* @return 返回BufferedImage
* @author fxbin
*/
public static BufferedImage getBarCode(String vaNumber, int WIDTH, int HEIGHT) {
try {
Code128Writer writer = new Code128Writer();
// 编码内容, 编码类型, 宽度, 高度, 设置参数
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 指定字符编码为“utf-8”
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 指定二维码的纠错等级为中级
hints.put(EncodeHintType.MARGIN, 1); // 设置图片的边距
BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
/**
* 把带logo的二维码下面加上文字
*
* @param image 条形码图片
* @param words 文字
* @return 返回BufferedImage
* @author fxbin
*/
public static BufferedImage insertWords(BufferedImage image, String words, int WIDTH, int HEIGHT, int WORD_HEIGHT) {
// 新的图片,把带logo的二维码下面加上文字
if (org.apache.commons.lang.StringUtils.isNotEmpty(words)) {
BufferedImage outImage = new BufferedImage(WIDTH, WORD_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = outImage.createGraphics();
// 抗锯齿
setGraphics2D(g2d);
// 设置白色
setColorWhite(g2d);
// 画条形码到新的面板
g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
// 画文字到新的面板
Color color = new Color(0, 0, 0);
g2d.setColor(color);
// 字体、字型、字号
g2d.setFont(new Font("微软雅黑", Font.PLAIN, 16));
//文字长度
int strWidth = g2d.getFontMetrics().stringWidth(words);
//总长度减去文字长度的一半 (居中显示)
int wordStartX = (WIDTH - strWidth) / 2;
//height + (outImage.getHeight() - height) / 2 + 12
int wordStartY = HEIGHT + 20;
// 画文字
g2d.drawString(words, wordStartX, wordStartY);
g2d.dispose();
outImage.flush();
return outImage;
}
return null;
}
/**
* 设置 Graphics2D 属性 抗锯齿
*
* @param g2d Graphics2D提供对几何形状坐标转换颜色管理和文本布局更为复杂的控制
*/
public static void setGraphics2D(Graphics2D g2d) {
// 消除画图锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 消除文字锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(s);
}
/**
* 设置背景为白色
*
* @param g2d Graphics2D提供对几何形状坐标转换颜色管理和文本布局更为复杂的控制
*/
public static void setColorWhite(Graphics2D g2d) {
g2d.setColor(Color.WHITE);
//填充整个屏幕
g2d.fillRect(0, 0, 302, 113);
//设置笔刷
g2d.setColor(Color.BLACK);
}

2
src/main/resources/templates/pages/user/login.html

@ -116,7 +116,7 @@
},
success:function(data){
layer.close(this.layerIndex);
if(data.status != 200){
if(data.status !== 200){
layer.msg(data.statusInfo.message);//失败的表情
$.ajax({
url:"/getCaptchaid",

2
src/main/resources/templates/pages/warehouse/warehouse_view.html

@ -187,7 +187,7 @@
success: function (d) {
var data = d.data;
layer.close(this.layerIndex);
// $("#barCode").attr("src", data.qrCode);
$("#barCode").attr("src", data.qrCode);
$("#barCodeValue").text(data.codeValue);
$("#codeItem").show();
$("#createCode").hide();

151
src/test/java/com/dreamchaser/depository_manage/TestOther.java

@ -1,33 +1,150 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.JM_3DES;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestOther {
/**
* 条形码宽度
*/
public static final int WIDTH = 300;
/**
* 条形码高度
*/
public static final int HEIGHT = 52;
/**
* 加文字 条形码
*/
public static final int WORD_HEIGHT = 80;
/**
* 设置 条形码参数
*/
public Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {
public static final long serialVersionUID = 1L;
{
// 设置编码方式
put(EncodeHintType.CHARACTER_SET, "utf-8");
// 容错级别 这里选择最高H级别
put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
put(EncodeHintType.MARGIN, 1);
}
};
@Test
public void Test() {
ArrayList<String> list = new ArrayList<String>();
list.add("PangFuZhen");
list.add("KaiXinGuo");
list.add("WoBenShanLiang_3");
System.out.println(list.contains("PangFuZhen"));
System.out.println(list.contains("PangFuZhen1"));
public void Test() throws IOException {
BufferedImage image = insertWords(getBarCode("123456"), "123456");
ImageIO.write(image, "jpg", new File("D:/superMan.png"));
}
/**
* 生成 图片缓冲
*
* @param vaNumber VA
* @return 返回BufferedImage
* @author fxbin
*/
public BufferedImage getBarCode(String vaNumber) {
try {
Code128Writer writer = new Code128Writer();
// 编码内容, 编码类型, 宽度, 高度, 设置参数
BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
/**
* 把带logo的二维码下面加上文字
*
* @param image 条形码图片
* @param words 文字
* @return 返回BufferedImage
* @author fxbin
*/
public BufferedImage insertWords(BufferedImage image, String words) {
// 新的图片,把带logo的二维码下面加上文字
if (StringUtils.isNotEmpty(words)) {
BufferedImage outImage = new BufferedImage(WIDTH, WORD_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = outImage.createGraphics();
// 抗锯齿
setGraphics2D(g2d);
// 设置白色
setColorWhite(g2d);
// 画条形码到新的面板
g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
// 画文字到新的面板
Color color = new Color(0, 0, 0);
g2d.setColor(color);
// 字体、字型、字号
g2d.setFont(new Font("微软雅黑", Font.PLAIN, 16));
//文字长度
int strWidth = g2d.getFontMetrics().stringWidth(words);
//总长度减去文字长度的一半 (居中显示)
int wordStartX = (WIDTH - strWidth) / 2;
//height + (outImage.getHeight() - height) / 2 + 12
int wordStartY = HEIGHT + 20;
// 画文字
g2d.drawString(words, wordStartX, wordStartY);
g2d.dispose();
outImage.flush();
return outImage;
}
return null;
}
/**
* 设置 Graphics2D 属性 抗锯齿
*
* @param g2d Graphics2D提供对几何形状坐标转换颜色管理和文本布局更为复杂的控制
*/
public void setGraphics2D(Graphics2D g2d) {
// 消除画图锯齿
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 消除文字锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
g2d.setStroke(s);
}
/**
* 设置背景为白色
*
* @param g2d Graphics2D提供对几何形状坐标转换颜色管理和文本布局更为复杂的控制
*/
public void setColorWhite(Graphics2D g2d) {
g2d.setColor(Color.WHITE);
//填充整个屏幕
g2d.fillRect(0, 0, 302, 113);
//设置笔刷
g2d.setColor(Color.BLACK);
}
}

Loading…
Cancel
Save