# Python Barcode Generator

This utility generates barcodes in various formats (like EAN-13, CODE128, ISBN) using the `python-barcode` library. It can save the output as an SVG (default) or a PNG image.

**Modules Used:**
*   `python-barcode`: To generate the barcode data and images.
*   [[programming/python/modules/argparse-module|argparse]]: To handle command-line arguments.
*   [[programming/python/modules/pillow-module|Pillow]]: (Optional) Required if you want to save barcodes as PNG images.

## Installation

```bash
pip install python-barcode

# Optional: For PNG support
pip install "python-barcode[images]"
```

## The Code

Save this as `barcode_gen.py`.

```python
import barcode
from barcode.writer import ImageWriter
import argparse
import sys

def generate_barcode(data, barcode_type, output_file, as_png):
    try:
        # Get the barcode class
        barcode_class = barcode.get_barcode_class(barcode_type)
        
        # Create writer if PNG is requested
        writer = ImageWriter() if as_png else None
        
        # Create barcode object
        my_barcode = barcode_class(data, writer=writer)
        
        # Save
        # python-barcode automatically appends the extension (.svg or .png)
        filename = my_barcode.save(output_file)
        
        print(f"Barcode generated successfully: {filename}")
        
    except barcode.errors.BarcodeNotFoundError:
        print(f"Error: Barcode type '{barcode_type}' not found.")
        print(f"Available types: {', '.join(barcode.PROVIDED_BARCODES)}")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Barcode Generator")
    parser.add_argument("data", help="The data/text to encode in the barcode")
    parser.add_argument("-t", "--type", default="code128", help="Barcode type (e.g., code128, ean13, isbn). Default: code128")
    parser.add_argument("-o", "--output", default="barcode", help="Output filename (without extension)")
    parser.add_argument("--png", action="store_true", help="Save as PNG instead of SVG (requires Pillow)")
    
    args = parser.parse_args()
    
    generate_barcode(args.data, args.type, args.output, args.png)
```

## Usage

```bash
# Generate a Code128 barcode (SVG)
python barcode_gen.py "Hello World"

# Generate an EAN-13 barcode as PNG
python barcode_gen.py "123456789012" --type ean13 --png --output my_product
```

[[programming/python/python]]