PHP项目条形码如何生成展示使用

wen PHP项目 29

本文目录导读:

PHP项目条形码如何生成展示使用

  1. 使用Barcode Generator库(推荐)
  2. 完整的前后端展示方案
  3. 批量生成条形码
  4. 使用GD库直接生成(无需第三方库)
  5. 在PDF中生成条形码

我来详细介绍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');

推荐方案

  1. 轻量级应用:使用 picqer/php-barcode-generator
  2. 无需外部库:使用GD库手写生成
  3. 需要PDF集成:结合FPDF或TCPDF使用
  4. 批量处理:使用批量生成类
  5. 前后端分离:提供API接口

注意事项

  • 确保服务器支持GD库或安装好Composer依赖建议包含校验位
  • 考虑条形码的可读性,设置合适的宽度和高度
  • 生产环境注意缓存和性能优化

选择适合你项目需求的方法即可!

抱歉,评论功能暂时关闭!