diff --git a/epmet-commons/epmet-commons-tools/pom.xml b/epmet-commons/epmet-commons-tools/pom.xml
index c551a68db1..7542899ad0 100644
--- a/epmet-commons/epmet-commons-tools/pom.xml
+++ b/epmet-commons/epmet-commons-tools/pom.xml
@@ -166,6 +166,17 @@
transmittable-thread-local
2.12.4
+
+ com.google.zxing
+ core
+ 3.3.2
+
+
+
+ com.google.zxing
+ javase
+ 3.3.2
+
diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/BarcodeUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/BarcodeUtils.java
new file mode 100644
index 0000000000..555643e9e1
--- /dev/null
+++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/utils/BarcodeUtils.java
@@ -0,0 +1,177 @@
+package com.epmet.commons.tools.utils;
+
+/**
+ * desc:
+ *
+ * @author: LiuJanJun
+ * @date: 2022/3/18 11:57 上午
+ * @version: 1.0
+ */
+
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.CharacterSetECI;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+
+/**
+ * Author 程鹏
+ * Date: 2021/08/27 16:01
+ * Description:二维码生成工具类
+ */
+public class BarcodeUtils {
+ /**
+ * 二维码颜色 默认是黑色
+ */
+ private static final Color QRCOLOR = Color.black;
+ /**
+ * 背景颜色
+ */
+ private static final Color BGWHITE = Color.white;
+ public static final int WIDTH = 360;
+ public static final int HEIGHT = 512;
+ public static final int MARGIN = 2;
+ public static final int FONTSIZE = 20;
+
+
+ /**
+ * // 二维码生成
+ *
+ * @param contents 说明
+ * @return BufferedImage
+ * @throws Exception
+ */
+ public static BufferedImage drawQRImage(String pressText, String contents) throws Exception {
+ BufferedImage qRImage = null;
+ if (contents == null || "".equals(contents)) {
+ throw new Exception("content说明不能为空");
+ }
+ // 二维码参数设置
+ HashMap hints = new HashMap<>();
+ hints.put(EncodeHintType.CHARACTER_SET, CharacterSetECI.UTF8); // 编码设置
+ hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 安全等级,最高h
+ hints.put(EncodeHintType.MARGIN, MARGIN); // 设置margin=0-10
+
+ // 二维码图片的生成
+ BarcodeFormat format = BarcodeFormat.QR_CODE;
+ // 创建矩阵容器
+ BitMatrix matrix = null;
+ try {
+ matrix = new MultiFormatWriter().encode(contents, format, WIDTH, HEIGHT, hints);
+ } catch (WriterException e) {
+ e.printStackTrace();
+ }
+
+ // 设置矩阵转为图片的参数
+ MatrixToImageConfig toImageConfig = new MatrixToImageConfig(QRCOLOR.getRGB(), BGWHITE.getRGB());
+
+ // 矩阵转换图像
+ qRImage = MatrixToImageWriter.toBufferedImage(matrix, toImageConfig);
+ return pressText(pressText, qRImage);
+ }
+
+ /**
+ * @param pressText 二维码下方插入文字
+ * @param image 需要添加文字的图片
+ * @为图片添加文字
+ */
+ private static BufferedImage pressText(String pressText, BufferedImage image) throws Exception {
+
+ BufferedImage outImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
+ //计算文字开始的位置
+ //x开始的位置:(图片宽度-字体大小*字的个数)/2
+ int startX = (WIDTH - (FONTSIZE * pressText.length())) / 2;
+ //y开始的位置:图片高度-(图片高度-图片宽度)/2
+ int startY = HEIGHT - (HEIGHT - WIDTH) / 2;
+
+ int imageW = outImage.getWidth();
+ int imageH = outImage.getHeight();
+ Graphics2D g = outImage.createGraphics();
+ g.drawImage(image, 0, 0, imageW, imageH, null);
+ g.setColor(QRCOLOR);
+ g.setFont(new Font("微软雅黑", Font.BOLD, FONTSIZE));
+ g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+ g.setBackground(Color.white);
+// 获取文字数量 按照字节展示
+ int size = pressText.getBytes("GBK").length;
+// 获取一行最多能容纳多少文字 按照文字字节展示
+ int maxSize = (WIDTH / FONTSIZE - 2) * 2;
+ if (size > maxSize) {
+ int v = size % maxSize;
+ for (int a = 0; a < (size / maxSize); a++) {
+ String s = outStringByByte(pressText, maxSize);
+ g.drawString(s, (WIDTH - (FONTSIZE * (WIDTH / FONTSIZE - 2))) / 2, startY);
+ pressText = pressText.substring(s.length(), pressText.length());
+ startY = startY + 30;
+ }
+ if (v != 0) {
+ g.drawString(pressText, (WIDTH - (FONTSIZE * v)) / 2, startY);
+ }
+ } else {
+ g.drawString(pressText, (WIDTH - ((pressText.getBytes("GBK").length) / 2) * FONTSIZE) / 2, startY);
+ }
+
+ g.dispose();
+ return outImage;
+ }
+
+
+ /**
+ * 保存二维码图片到本地
+ *
+ * @param contents
+ * @throws Exception
+ */
+ public static void createImg(String pressText, String contents, String filename, String filePath) throws Exception {
+ BufferedImage qRImageWithLogo = drawQRImage(pressText, contents);
+ // 写入返回
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ImageIO.write(qRImageWithLogo, "jpg", baos);
+ //图片类型
+ String imageType = "jpg";
+ //生成二维码存放文件
+ File file = new File(filePath + filename + ".jpg");
+ if (!file.exists()) {
+ file.mkdirs();
+ }
+ ImageIO.write(qRImageWithLogo, imageType, file);
+ baos.close();
+ }
+
+
+ private static String outStringByByte(String str, int len) throws IOException {
+ byte[] btf = str.getBytes("gbk");
+ int count = 0;
+
+ for (int j = len - 1; j >= 0; j--) {
+ if (btf[j] < 0) {
+ count++;
+ } else {
+ break;
+ }
+ }
+
+ if (count % 2 == 0) {
+ return new String(btf, 0, len, "gbk");
+ } else {
+ return new String(btf, 0, len - 1, "gbk");
+ }
+
+ }
+
+
+}
+
diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java
index 26db2c084f..a482511982 100644
--- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java
+++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/AgencyController.java
@@ -382,7 +382,7 @@ public class AgencyController {
}
public static void write() throws IOException, WriterException {
- String filePath = "/Volumes/self";
+ String filePath = "/Users/liujianjun/Downloads";
String fileName = "qr.png";
//二维码内容场景一:json数据
JSONObject json = new JSONObject();
@@ -414,4 +414,4 @@ public class AgencyController {
}
}
-}
\ No newline at end of file
+}