依赖
<zxing.version>3.5.3</zxing.version>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${zxing.version}</version>
</dependency>
代码
package com.ruoyi.common.utils;
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.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
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;
public class PrintUtil
{
public static BufferedImage createBlankImg(int width, int height)
{
BufferedImage blank = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics graphics = blank.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, width, height);
return blank;
}
public static BufferedImage createCode128(int width, int height, String content)
{
Map<EncodeHintType, Object> hints = new HashMap<>(1);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = null;
try
{
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.CODE_128, width, height, hints);
}
catch (WriterException e)
{
e.printStackTrace();
}
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}
public static BufferedImage createQrCode(int width, int height, String content)
{
Map<EncodeHintType, Object> hints = new HashMap<>(1);
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.MARGIN, "0");
BitMatrix bitMatrix = null;
try
{
bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
}
catch (WriterException e)
{
e.printStackTrace();
}
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}
public static BufferedImage drawTextCode(int height, int width, int fontSize, int border, int textTopMargin, String content, String descContent)
{
return drawTextCode(height, width, fontSize, border, textTopMargin, content, descContent, 1);
}
public static BufferedImage drawFixCodeTextCode(int width, String content, String descContent)
{
final int fontSize = 25;
final int border = 15;
final int textHeight = 30;
final int textWidth = 30;
final int textSpacing = 5;
final int titleFontSize = 30;
final int titleTextHeight = 10;
int lines = (descContent.length()*30) / width;
int lx = (descContent.length()*30) % width;
if (lx > 0)
{
lines ++;
}
BufferedImage blank = createBlankImg(width + border * 2, width + titleTextHeight + lines * (textWidth + textSpacing) + border);
Graphics2D graphics = blank.createGraphics();
graphics.setColor(Color.BLACK);
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
Font titleFont = new Font("宋体", Font.BOLD, titleFontSize);
FontMetrics titleMetrics = graphics.getFontMetrics(titleFont);
Font descFont = new Font("宋体", Font.BOLD, fontSize);
FontMetrics descMetrics = graphics.getFontMetrics(descFont);
BufferedImage barCode = createQrCode(width, width , content);
graphics.drawImage(barCode, border, border + titleTextHeight, null);
graphics.setFont(descFont);
char[] chars = descContent.toCharArray();
int everyCharNum = chars.length/lines;
int everyCharLx = chars.length%lines;
for (int i = 0 ; i <lines ; i++)
{
int count = i+everyCharNum;
if (i == lines - 1)
{
count = everyCharNum + everyCharLx;
}
String thisLineString = new String(chars,i * everyCharNum,count);
graphics.drawString(thisLineString,
border + ((width - descMetrics.stringWidth(thisLineString)) / 2),
titleTextHeight + width + (i + 1) * (textHeight + textSpacing));
}
return blank;
}
public static BufferedImage drawTextCode(int height, int width, int fontSize, int border, int textTopMargin, String content, String descContent, int codeType)
{
BufferedImage blank = createBlankImg(width, height);
Graphics2D graphics = blank.createGraphics();
graphics.setColor(Color.BLACK);
Font font = new Font("宋体", Font.BOLD, fontSize);
graphics.setFont(font);
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
FontMetrics metrics = graphics.getFontMetrics(font);
int metricsHeight = metrics.getHeight();
BufferedImage barCode;
if (codeType == 2)
{
barCode = createQrCode(width - border * 2, height - border * 2 - metricsHeight - textTopMargin, content);
}
else
{
barCode = createCode128(width - border * 2, height - border * 2 - metricsHeight - textTopMargin, content);
}
graphics.drawImage(barCode, border, border, null);
graphics.drawString(descContent,
(width - metrics.stringWidth(descContent)) / 2,
border + barCode.getHeight() + textTopMargin + metricsHeight);
return blank;
}
public static void main(String[] args) throws IOException
{
BufferedImage img = drawFixCodeTextCode(400, "WWWHUASDFIHIUASDHFIHASIUFH", "例如一个图像灰度变化");
ImageIO.write(img, "png", new File("C:\\Users\\GLY\\Desktop\\ax.png"));
}
}