File size: 2,972 Bytes
001415b
 
c930f4b
 
f18daf4
 
001415b
c930f4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
001415b
 
 
 
 
 
c930f4b
001415b
 
c930f4b
 
 
 
f18daf4
 
 
 
 
 
001415b
5d8d25f
001415b
 
5d8d25f
001415b
 
c930f4b
 
 
 
 
 
 
5d8d25f
001415b
c930f4b
 
 
5d8d25f
c930f4b
001415b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import gradio as gr
import barcode
from barcode.writer import SVGWriter
from io import BytesIO
import tempfile
import os

# Barcode explanations
BARCODE_EXPLANATIONS = {
    "EAN13": (
        "EAN-13 (International Article Number) is a 13-digit barcode widely used for retail products globally. "
        "It encodes a GS1 prefix (country or organization), manufacturer code, product code, and a check digit. "
        "EAN-13 is compatible with UPC systems and is essential for international product identification."
    ),
    "Code128": (
        "Code 128 is a high-density, variable-length barcode that can encode all ASCII characters (letters, numbers, symbols). "
        "It is commonly used in logistics and shipping due to its ability to store complex data in a compact form and includes a checksum for error detection."
    ),
    "UPC": (
        "UPC (Universal Product Code) is a 12-digit barcode used mainly in North America for retail product identification. "
        "It consists of a manufacturer code, item number, and a check digit. UPCs streamline inventory and checkout processes in stores."
    ),
    "ISBN13": (
        "ISBN-13 is a 13-digit identifier for books, encoded as an EAN-13 barcode. "
        "It uniquely identifies books internationally and is essential for publishers, libraries, and retailers."
    ),
}

def generate_barcode_svg(text, barcode_type):
    BARCODE_CLASSES = {
        "EAN13": barcode.get_barcode_class('ean13'),
        "Code128": barcode.get_barcode_class('code128'),
        "UPC": barcode.get_barcode_class('upc'),
        "ISBN13": barcode.get_barcode_class('isbn13'),
    }
    explanation = BARCODE_EXPLANATIONS.get(barcode_type, "No explanation available.")
    try:
        bc_class = BARCODE_CLASSES[barcode_type]
        svg_buffer = BytesIO()
        bc = bc_class(text, writer=SVGWriter())
        bc.write(svg_buffer)
        svg_data = svg_buffer.getvalue().decode("utf-8")

        # Save SVG to a temporary file and return the file path
        tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".svg")
        tmp.write(svg_data.encode("utf-8"))
        tmp.close()
        return explanation, svg_data, tmp.name
    except Exception as e:
        return f"Error: {str(e)}", None, None

with gr.Blocks() as demo:
    gr.Markdown("# Barcode Generator (SVG Output with Download)")
    with gr.Row():
        text_input = gr.Textbox(label="Text to encode")
        barcode_type = gr.Dropdown(
            ["EAN13", "Code128", "UPC", "ISBN13"],
            value="Code128",
            label="Barcode Type"
        )
    explanation_box = gr.Markdown(label="Barcode Explanation")
    svg_output = gr.HTML(label="Generated Barcode (SVG)")
    download_btn = gr.File(label="Download SVG")
    btn = gr.Button("Generate Barcode")
    btn.click(
        generate_barcode_svg,
        inputs=[text_input, barcode_type],
        outputs=[explanation_box, svg_output, download_btn]
    )

demo.launch()