124 lines
4.1 KiB
Python
124 lines
4.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
|
|
import barcode
|
|
|
|
from argparse import ArgumentParser
|
|
|
|
from barcode.writer import ImageWriter, SVGWriter
|
|
from barcode.version import version
|
|
|
|
# Optional PyQt4 GUI
|
|
try:
|
|
from PyQt4 import QtCore
|
|
except ImportError:
|
|
QtCore = None # lint:ok
|
|
|
|
# No GUI available yet
|
|
QtCore = None
|
|
IMG_FORMATS = ('BMP', 'GIF', 'JPEG', 'MSP', 'PCX', 'PNG', 'TIFF', 'XBM')
|
|
|
|
|
|
def open_gui(args, parser=None):
|
|
pass
|
|
|
|
|
|
def list_types(args, parser=None):
|
|
print('\npyBarcode available barcode formats:')
|
|
print(', '.join(barcode.PROVIDED_BARCODES))
|
|
print('\n')
|
|
print('Available image formats')
|
|
print('Standard: svg')
|
|
if ImageWriter is not None:
|
|
print('Pillow:', ', '.join(IMG_FORMATS))
|
|
else:
|
|
print('Pillow: disabled')
|
|
print('\n')
|
|
|
|
|
|
def create_barcode(args, parser):
|
|
args.type = args.type.upper()
|
|
if args.type != 'SVG' and args.type not in IMG_FORMATS:
|
|
parser.error(
|
|
'Unknown type {type}. Try list action for available '
|
|
'types.'.format(type=args.type)
|
|
)
|
|
args.barcode = args.barcode.lower()
|
|
if args.barcode not in barcode.PROVIDED_BARCODES:
|
|
parser.error(
|
|
'Unknown barcode {bc}. Try list action for available '
|
|
'barcodes.'.format(bc=args.barcode)
|
|
)
|
|
if args.type != 'SVG':
|
|
opts = dict(format=args.type)
|
|
writer = ImageWriter()
|
|
else:
|
|
opts = dict(compress=args.compress)
|
|
writer = SVGWriter()
|
|
out = os.path.normpath(os.path.abspath(args.output))
|
|
name = barcode.generate(args.barcode, args.code, writer, out, opts,
|
|
args.text)
|
|
print('New barcode saved as {0}.'.format(name))
|
|
|
|
|
|
def main():
|
|
msg = []
|
|
if ImageWriter is None:
|
|
msg.append(
|
|
'Image output disabled (Pillow not found), --type option disabled.'
|
|
)
|
|
else:
|
|
msg.append(
|
|
'Image output enabled, use --type option to give image '
|
|
'format (png, jpeg, ...).'
|
|
)
|
|
if QtCore is None:
|
|
msg.append('PyQt not found, gui action disabled.')
|
|
else:
|
|
msg.append('PyQt found. Use gui action to get a simple GUI.')
|
|
parser = ArgumentParser(
|
|
description='Create standard barcodes via cli.', epilog=' '.join(msg)
|
|
)
|
|
parser.add_argument('-v', '--version', action='version',
|
|
version='%(prog)s ' + version)
|
|
subparsers = parser.add_subparsers(title='Actions')
|
|
create_parser = subparsers.add_parser('create', help='Create a barcode '
|
|
'with the given options.')
|
|
create_parser.add_argument('code', help='Code to render as barcode.')
|
|
create_parser.add_argument('output', help='Filename for output '
|
|
'without extension, e. g. mybarcode.')
|
|
create_parser.add_argument(
|
|
'-c', '--compress', action='store_true',
|
|
help='Compress output, only recognized if type is svg.'
|
|
)
|
|
create_parser.add_argument('-b', '--barcode', help='Barcode to use '
|
|
'[default: %(default)s].')
|
|
create_parser.add_argument('--text', help='Text to show under the '
|
|
'barcode.')
|
|
if ImageWriter is not None:
|
|
create_parser.add_argument('-t', '--type', help='Type of output '
|
|
'[default: %(default)s].')
|
|
list_parser = subparsers.add_parser('list', help='List available '
|
|
'image and code types.')
|
|
list_parser.set_defaults(func=list_types)
|
|
if QtCore is not None:
|
|
gui_parser = subparsers.add_parser('gui', help='Opens a simple '
|
|
'PyQt GUI to create barcodes.')
|
|
gui_parser.set_defaults(func=open_gui)
|
|
create_parser.set_defaults(type='svg', compress=False, func=create_barcode,
|
|
barcode='code39', text=None)
|
|
args = parser.parse_args()
|
|
try:
|
|
func = args.func
|
|
except AttributeError:
|
|
parser.error("You need to tell me what to do.")
|
|
else:
|
|
func(args, parser)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|