本文目录导读:

我来详细介绍PHP项目中条形码的生成和展示方法,包括多种实现方案和实际示例。
使用Barcode Generator库(推荐)
安装
composer require picqer/php-barcode-generator
生成条形码示例
<?php
require 'vendor/autoload.php';
use Picqer\Barcode\BarcodeGeneratorPNG;
use Picqer\Barcode\BarcodeGeneratorHTML;
use Picqer\Barcode\BarcodeGeneratorSVG;
// 创建生成器实例
$generator = new BarcodeGeneratorPNG();
// 生成条形码(Code128格式)
$barcode = $generator->getBarcode('1234567890', $generator::TYPE_CODE_128);
// 输出到浏览器显示
header('Content-Type: image/png');
echo $barcode;
生成不同格式的条形码
<?php
class BarcodeService
{
private $generator;
public function __construct()
{
$this->generator = new BarcodeGeneratorPNG();
}
/**
* 生成条形码并保存为图片文件
*/
public function generateToFile($code, $filename, $type = 'C128')
{
$typeMap = [
'C128' => BarcodeGeneratorPNG::TYPE_CODE_128,
'C39' => BarcodeGeneratorPNG::TYPE_CODE_39,
'EAN13' => BarcodeGeneratorPNG::TYPE_EAN_13,
'UPC' => BarcodeGeneratorPNG::TYPE_UPC_A,
];
$barcode = $this->generator->getBarcode(
$code,
$typeMap[$type] ?? BarcodeGeneratorPNG::TYPE_CODE_128,
2, // 宽度因子
50 // 高度
);
file_put_contents($filename, $barcode);
return $filename;
}
/**
* 生成HTML条形码
*/
public function generateHTML($code)
{
$htmlGenerator = new BarcodeGeneratorHTML();
return $htmlGenerator->getBarcode($code, BarcodeGeneratorHTML::TYPE_CODE_128);
}
/**
* 生成SVG条形码
*/
public function generateSVG($code)
{
$svgGenerator = new BarcodeGeneratorSVG();
return $svgGenerator->getBarcode($code, BarcodeGeneratorSVG::TYPE_CODE_128);
}
}
完整的前后端展示方案
后端API接口
<?php
// barcode_api.php
header('Content-Type: application/json');
require 'vendor/autoload.php';
use Picqer\Barcode\BarcodeGeneratorPNG;
class BarcodeAPI
{
public function generate($code, $options = [])
{
try {
$generator = new BarcodeGeneratorPNG();
// 默认参数
$widthFactor = $options['width'] ?? 2;
$height = $options['height'] ?? 50;
$color = $options['color'] ?? [0, 0, 0];
// 生成条形码
$barcode = $generator->getBarcode(
$code,
$generator::TYPE_CODE_128,
$widthFactor,
$height,
$color
);
// Base64编码
$base64 = base64_encode($barcode);
return [
'success' => true,
'data' => [
'code' => $code,
'image' => 'data:image/png;base64,' . $base64,
'format' => 'png'
]
];
} catch (Exception $e) {
return [
'success' => false,
'message' => $e->getMessage()
];
}
}
}
// 处理请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$input = json_decode(file_get_contents('php://input'), true);
$code = $input['code'] ?? '';
$api = new BarcodeAPI();
$result = $api->generate($code);
echo json_encode($result);
}
前端展示代码
<!DOCTYPE html>
<html>
<head>条形码生成器</title>
<style>
.barcode-container {
margin: 20px;
padding: 20px;
border: 1px solid #ddd;
border-radius: 5px;
max-width: 400px;
}
.barcode-image {
display: block;
margin: 10px 0;
max-width: 100%;
}
.form-control {
margin: 10px 0;
padding: 8px;
width: 100%;
}
.btn {
padding: 10px 20px;
background: #007bff;
color: white;
border: none;
cursor: pointer;
}
.error {
color: red;
margin: 10px 0;
}
</style>
</head>
<body>
<div class="barcode-container">
<h3>条形码生成器</h3>
<div>
<input type="text" id="barcodeInput" class="form-control"
placeholder="输入条形码内容" value="1234567890">
<button onclick="generateBarcode()" class="btn">生成条形码</button>
</div>
<div id="barcodeResult"></div>
<div id="errorMessage" class="error"></div>
</div>
<script>
async function generateBarcode() {
const code = document.getElementById('barcodeInput').value;
const resultDiv = document.getElementById('barcodeResult');
const errorDiv = document.getElementById('errorMessage');
if (!code) {
errorDiv.textContent = '请输入条形码内容';
return;
}
try {
const response = await fetch('barcode_api.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ code: code })
});
const data = await response.json();
if (data.success) {
resultDiv.innerHTML = `
<img src="${data.data.image}" class="barcode-image" alt="条形码">
<p>条形码内容: ${data.data.code}</p>
`;
errorDiv.textContent = '';
} else {
errorDiv.textContent = data.message;
resultDiv.innerHTML = '';
}
} catch (error) {
errorDiv.textContent = '生成条形码失败: ' + error.message;
}
}
// 页面加载时自动生成
window.onload = function() {
generateBarcode();
};
</script>
</body>
</html>
批量生成条形码
<?php
class BatchBarcodeGenerator
{
private $generator;
private $outputDir;
public function __construct($outputDir = 'barcodes/')
{
$this->generator = new BarcodeGeneratorPNG();
$this->outputDir = $outputDir;
if (!file_exists($outputDir)) {
mkdir($outputDir, 0777, true);
}
}
/**
* 批量生成条形码
*/
public function generateBatch(array $codes, $prefix = 'barcode_')
{
$results = [];
foreach ($codes as $index => $code) {
$filename = $this->outputDir . $prefix . $index . '_' . $code . '.png';
$barcode = $this->generator->getBarcode(
$code,
$this->generator::TYPE_CODE_128,
2,
50
);
file_put_contents($filename, $barcode);
$results[] = [
'code' => $code,
'filename' => $filename,
'url' => '/barcodes/' . basename($filename)
];
}
return $results;
}
/**
* 生成并返回HTML表格
*/
public function generateTableHtml(array $codes)
{
$html = '<table border="1" cellpadding="10">';
$html .= '<tr><th>条形码</th><th>内容</th></tr>';
foreach ($codes as $code) {
$htmlGenerator = new BarcodeGeneratorHTML();
$barcode = $htmlGenerator->getBarcode($code, BarcodeGeneratorHTML::TYPE_CODE_128);
$html .= '<tr>';
$html .= '<td>' . $barcode . '</td>';
$html .= '<td>' . htmlspecialchars($code) . '</td>';
$html .= '</tr>';
}
$html .= '</table>';
return $html;
}
}
// 使用示例
$generator = new BatchBarcodeGenerator();
$codes = ['ABC001', 'ABC002', 'ABC003', 'ABC004', 'ABC005'];
// 批量生成图片
$results = $generator->generateBatch($codes);
// 生成HTML表格
echo $generator->generateTableHtml($codes);
使用GD库直接生成(无需第三方库)
<?php
class SimpleBarcodeGenerator
{
/**
* 使用GD库生成简单条形码
*/
public function generate($code, $width = 300, $height = 100)
{
// 创建图像
$image = imagecreate($width, $height);
// 设置颜色
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// 填充背景
imagefill($image, 0, 0, $white);
// 将数字转换为二进制条码模式(Code 128简化版)
$pattern = $this->strToCode128($code);
// 绘制条形码
$x = 10;
$barWidth = 2;
for ($i = 0; $i < strlen($pattern); $i++) {
if ($pattern[$i] == '1') {
imagefilledrectangle(
$image,
$x,
10,
$x + $barWidth,
$height - 30,
$black
);
}
$x += $barWidth;
}
// 添加文本
$textColor = imagecolorallocate($image, 0, 0, 0);
$textWidth = imagefontwidth(5) * strlen($code);
$x = ($width - $textWidth) / 2;
imagestring($image, 5, $x, $height - 20, $code, $textColor);
// 输出图像
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
}
private function strToCode128($str)
{
// 简化的Code128编码
$code = '';
$strlen = strlen($str);
for ($i = 0; $i < $strlen; $i++) {
$char = ord($str[$i]);
for ($j = 6; $j >= 0; $j--) {
$code .= ($char >> $j) & 1 ? '1' : '0';
}
}
return $code;
}
}
// 使用
$barcode = new SimpleBarcodeGenerator();
$barcode->generate('1234567890');
在PDF中生成条形码
<?php
require 'vendor/autoload.php';
use Picqer\Barcode\BarcodeGeneratorPNG;
use setasign\Fpdi\Fpdi;
class BarcodePDF
{
/**
* 生成带条形码的PDF
*/
public function generateBarcodePDF($code, $filename = 'barcode.pdf')
{
// 创建PDF
$pdf = new Fpdi();
$pdf->AddPage();
// 生成条形码
$generator = new BarcodeGeneratorPNG();
$barcode = $generator->getBarcode(
$code,
$generator::TYPE_CODE_128,
2,
50
);
// 保存临时文件
$tempFile = tempnam(sys_get_temp_dir(), 'barcode');
file_put_contents($tempFile, $barcode);
// 将条形码插入PDF
$pdf->Image($tempFile, 50, 100, 100, 30);
// 输出PDF
$pdf->Output($filename, 'I');
// 删除临时文件
unlink($tempFile);
}
}
// 使用
$pdfGenerator = new BarcodePDF();
$pdfGenerator->generateBarcodePDF('1234567890', 'my_barcode.pdf');
推荐方案
- 轻量级应用:使用
picqer/php-barcode-generator库 - 无需外部库:使用GD库手写生成
- 需要PDF集成:结合FPDF或TCPDF使用
- 批量处理:使用批量生成类
- 前后端分离:提供API接口
注意事项
- 确保服务器支持GD库或安装好Composer依赖建议包含校验位
- 考虑条形码的可读性,设置合适的宽度和高度
- 生产环境注意缓存和性能优化
选择适合你项目需求的方法即可!