"use client"; import React, { useState } from "react"; import Barcode from "react-barcode"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Barcode as BarcodeIcon, Download, RotateCcw } from "lucide-react"; import { toast } from "sonner"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; export default function BarcodePage() { const [value, setValue] = useState("123456789012"); const [format, setFormat] = useState("CODE128"); const [width, setWidth] = useState(2); const [height, setHeight] = useState(100); const [displayValue, setDisplayValue] = useState(true); const handleDownload = () => { const svg = document.querySelector("#barcode-svg svg"); if (!svg) return; const svgData = new XMLSerializer().serializeToString(svg); const canvas = document.createElement("canvas"); const ctx = canvas.getContext("2d"); const img = new Image(); img.onload = () => { canvas.width = img.width; canvas.height = img.height; ctx?.drawImage(img, 0, 0); const pngFile = canvas.toDataURL("image/png"); const downloadLink = document.createElement("a"); downloadLink.download = `barcode-${value}.png`; downloadLink.href = pngFile; downloadLink.click(); toast.success("条形码已下载"); }; img.src = "data:image/svg+xml;base64," + btoa(svgData); }; return (

条形码生成

生成 EAN, UPC, CODE128 等多种格式条形码

{value ? ( ) : (
请输入内容以生成条形码
)}
配置选项
setValue(e.target.value)} placeholder="例如:123456789" />
setWidth(parseFloat(e.target.value))} />
setHeight(parseInt(e.target.value))} />
setDisplayValue(e.target.checked)} className="rounded border-gray-300 text-primary focus:ring-primary" aria-label="显示文字" />
💡 注意:某些格式(如 EAN13)对输入内容的长度和校验位有特殊要求,如果不符合规范可能无法显示。
); }