Java中生成条形码是一个常见的需求,尤其在商品管理、支付系统和信息分享等领域,下面将详细介绍如何在Java中生成条形码,包括所需的工具、步骤以及示例代码。
选择合适的库
在Java中生成条形码,常用的库有ZXing、iText、barcode4j和JBarCode等,这些库各有特点,适用于不同的场景。
| 库名 | 特点 |
|---|---|
| ZXing | 开源,支持多种格式(如Code 128、EAN-13、QR Code等),社区活跃,文档齐全。 |
| iText | 主要用于创建和操作PDF文档,但也支持生成条形码,适合将条形码嵌入PDF文件。 |
| barcode4j | 专门用于生成条形码,支持多种标准(如Code 128、EAN、UPC等),可自定义条形码的美观度。 |
| JBarCode | 支持多种条码标准,API设计简洁,易于集成到各种Java应用中。 |
使用ZXing库生成条形码
ZXing是一个功能强大且易于使用的开源库,支持生成多种格式的条形码,以下是使用ZXing生成条形码的详细步骤:
添加依赖
如果你使用Maven进行项目管理,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.5.0</version>
</dependency>
编写生成条形码的代码
以下是一个简单的示例代码,展示如何使用ZXing生成Code 128格式的条形码:
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 java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
public class BarcodeGenerator {
public static void generateBarcode(String data, String filePath) throws WriterException, IOException {
// 设置条形码类型为Code 128
BarcodeFormat barcodeFormat = BarcodeFormat.CODE_128;
// 配置生成条形码的参数
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符集
// 生成条形码矩阵
BitMatrix bitMatrix = new MultiFormatWriter().encode(data, barcodeFormat, 200, 100, hints);
// 将条形码矩阵转换为图片并保存到指定路径
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
public static void main(String[] args) {
try {
// 要生成的条形码数据和文件路径
String data = "123456789012";
String filePath = "/path/to/your/barcode.png";
// 生成条形码
generateBarcode(data, filePath);
System.out.println("条形码生成成功!");
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
}
运行代码
运行上述代码后,将在指定的文件路径生成一个PNG格式的条形码图片,你可以使用条码扫描器扫描该图片,验证其准确性。
使用iText库生成条形码
iText是一个功能强大的Java库,主要用于创建和操作PDF文档,它也提供了生成条形码的功能,特别适合将条形码嵌入到PDF文件中,以下是使用iText生成条形码的步骤:
添加依赖
如果你使用Maven进行项目管理,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.2</version>
</dependency>
编写生成条形码的代码
以下是一个简单的示例代码,展示如何使用iText生成Code 128格式的条形码:
import com.itextpdf.barcodes.Barcode128;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.io.IOException;
public class BarcodeGenerator {
public static void generateBarcode(String data, String filePath) throws DocumentException, IOException {
// 创建一个PDF文档对象
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.open();
// 创建一个Code 128条形码对象
Barcode128 barcode = new Barcode128();
barcode.setCode(data); // 设置条形码数据
barcode.setBarHeight(10f); // 设置条形码高度
barcode.setX(1.0f); // 设置条形码X轴缩放比例
barcode.setY(1.0f); // 设置条形码Y轴缩放比例
// 将条形码转换为图片并添加到PDF文档中
Image barcodeImage = barcode.createImageWithBarcode(null, null);
document.add(barcodeImage);
document.close();
}
public static void main(String[] args) {
try {
// 要生成的条形码数据和文件路径
String data = "123456789012";
String filePath = "/path/to/your/barcode.pdf";
// 生成条形码并嵌入到PDF文件中
generateBarcode(data, filePath);
System.out.println("条形码生成成功!");
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
}
}
运行代码
运行上述代码后,将在指定的文件路径生成一个PDF文件,其中包含一个Code 128格式的条形码,你可以使用PDF阅读器打开该文件,并使用条码扫描器扫描条形码,验证其准确性。
使用barcode4j库生成条形码
barcode4j是一个专门用于生成条形码的Java库,支持多种标准(如Code 128、EAN、UPC等),它提供了丰富的配置选项,可以自定义条形码的美观度,以下是使用barcode4j生成条形码的步骤:
添加依赖
如果你使用Maven进行项目管理,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
编写生成条形码的代码
以下是一个简单的示例代码,展示如何使用barcode4j生成Code 128格式的条形码:
import net.sf.barcode4j.impl.codeone.Code128Bean;
import net.sf.barcode4j.output.OutputCanvas;
import net.sf.barcode4j.output.image.ImageCanvas;
import org.apache.commons.lang3.ObjectUtils;
import java.awt.;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class BarcodeGenerator {
public static void generateBarcode(String data, String filePath) throws IOException {
// 创建一个Code 128条形码对象
Code128Bean bean = new Code128Bean();
bean.doQuietZone(true); // 设置两侧是否留白
bean.setBarHeight(10d); // 设置条形码高度
bean.setModuleWidth(0.3); // 设置条形码宽度因子(单位:像素)
bean.setMsg(data); // 设置条形码
