网站首页 > 开源技术 正文
在Spring Boot项目中整合ZXing库来生成条形码在特定行业也是一个常见需求。
ZXing是google开源的一个功能强大的Java库,专门用于二维码/条形码等的生成与解析。它不仅能够生成QR码/条形码,还能解析包括QR码/条形码在内的多种格式.
1. 添加zxing的依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.2</version>
</dependency>
2. 生成条形码
import com.google.zxing.BarcodeFormat;
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 org.springframework.stereotype.Service;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
@Service
public class BarcodeService {
/**
* 生成条形码并保存到指定路径
* @param content 条形码内容
* @param path 保存路径
* @param width 条形码宽度
* @param height 条形码高度
*/
public void generateBarcodeImage(String content, String path, int width, int height) {
Code128Writer barcodeWriter = new Code128Writer();
BitMatrix bitMatrix = null;
try {
bitMatrix = barcodeWriter.encode(content, BarcodeFormat.CODE_128, width, height);
Path filePath = FileSystems.getDefault().getPath(path);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", filePath);
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
}
3. 调用条形码服务
最后,在Spring Boot的中调用这个服务生成条形码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BarcodeController {
@Autowired
private BarcodeService barcodeService;
@GetMapping("/generate-barcode")
public String generateBarcode(@RequestParam String content, @RequestParam String path, @RequestParam int width, @RequestParam int height) {
barcodeService.generateBarcodeImage(content, path, width, height);
return "Barcode generated successfully at " + path;
}
}
现在,当访问/generate-barcode端点并传递相应的参数时,将生成一个条形码并将其保存到指定的路径。如:
http://localhost:8080/generate-barcode?content=123456789&path=/path/to/barcode.png&width=300&height=100
这将生成一个内容为123456789、宽度为300像素、高度为100像素的条形码,并将其保存到/path/to/barcode.png路径下。
4. 返回条形码
如果需要将条形码直接返回,简单修改一下就好。
先修改BarcodeService以返回一个byte[]数组:
import com.google.zxing.*;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.oned.Code128Writer;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@Service
public class BarcodeService {
/**
* 生成条形码的字节数据
* @param content 条形码内容
* @param width 条形码宽度
* @param height 条形码高度
* @return 条形码的字节数据
*/
public byte[] generateBarcodeImage(String content, int width, int height) {
Code128Writer barcodeWriter = new Code128Writer();
BitMatrix bitMatrix = null;
try {
bitMatrix = barcodeWriter.encode(content, BarcodeFormat.CODE_128, width, height);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageConfig config = new MatrixToImageConfig(MatrixToImageConfig.BLACK, MatrixToImageConfig.WHITE);
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream, config);
return outputStream.toByteArray();
} catch (WriterException | IOException e) {
e.printStackTrace();
return null;
}
}
}
然后,修改BarcodeController以返回图片的字节数据:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BarcodeController {
@Autowired
private BarcodeService barcodeService;
@GetMapping("/generate-barcode")
public ResponseEntity<byte[]> generateBarcode(@RequestParam String content, @RequestParam int width, @RequestParam int height) {
byte[] barcodeImage = barcodeService.generateBarcodeImage(content, width, height);
if (barcodeImage != null) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return new ResponseEntity<>(barcodeImage, headers, HttpStatus.OK);
} else {
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
现在,当访问/generate-barcode端点并传递相应的参数时,它将生成一个条形码并将其作为PNG图片的字节数据返回。
猜你喜欢
- 2024-11-17 Python动态绘图的方法(上)
- 2024-11-17 Python动态绘图的方法
- 2024-11-17 AI数据分析:用kimi生成一个正弦波数学动画
- 2024-11-17 如何把python绘制的动态图形保存为gif文件或视频
- 2024-11-17 Java 图片压缩生成缩略图和水印
- 2024-11-17 医疗影像工具LEADTOOLS 入门教程: 使用文档编写器创建文档 - C#
- 2024-11-17 Celluloid让matplotlib动画-2:红绿灯
- 2024-11-17 使用Adobe dng SDK一步一步显示图像
- 2024-11-17 方便!Python 操作 Excel 神器 xlsxwriter 初识
- 2024-11-17 image 用 Rust 编写的图像库——001号RUST库
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)