本文目录导读:

我来详细介绍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依赖建议包含校验位
- 考虑条形码的可读性,设置合适的宽度和高度
- 生产环境注意缓存和性能优化
选择适合你项目需求的方法即可!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播