Easily encode your data into a 2D barcode using the PDF417 format.
Licensed under the MIT License, see LICENSE.
Install using pip:
pip install pdf417gen
The pdf417gen
command can be used to generate a barcode from commandline. It
takes the input either as an argument or from stdin.
# Show help
pdf417gen encode --help
# Encode given text and display the barcode
pdf417gen encode "Beautiful is better than ugly"
# Encode given text and save barcode to a file (extension determines format)
pdf417gen encode -o barcode.png "Explicit is better than implicit"
# Input from a file
pdf417gen encode < input.txt
# Piped input
python -c "import this" | pdf417gen encode
Creating bar codes is done in two steps:
- Encode a string to a list of code words using
encode()
- Render the barcode using one of the rendering functions:
render_image()
,render_svg()
.
Usage overview:
from pdf417gen import encode, render_image, render_svg
# Some data to encode
text = """Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated."""
# Convert to code words
codes = encode(text)
# Generate barcode as image
image = render_image(codes) # Pillow Image object
image.save('barcode.jpg')
# Generate barcode as SVG
svg = render_svg(codes) # ElementTree object
svg.write("barcode.svg")
Supports strings (unicode in py2) and byte arrays (str in py2):
# These two inputs encode to the same code words
encode(u"love 💔")
encode(b"love \xf0\x9f\x92\x94")
# Default encoding is UTF-8, but you can specify your own
encode(u"love 💔", encoding="utf-8")
The first step is to encode your data to a list of code words.
encode(data, columns=6, security_level=2˙)
The bar code size can be customized by defining the number of columns used to render the data, between 1 and 30, the default value is 6. A bar code can have a maximum of 90 rows, so for larger data sets you may need to increase the number of columns to decrease the rows count.
codes = encode(text, columns=12)
image = render_image(codes)
image.show()
Increasing the security level will produce stronger (and more numerous) error
correction codes, making the bar code larger, but less prone to corruption. The
security level can range from 0 to 8, and procuces 2^(level+1)
error
correction code words, meaning level 0 produces 2 code words and level 8
produces 512. The default security level is 2.
codes = encode(text, columns=12, security_level=6)
image = render_image(codes)
image.show()
The render_image
function takes the following options:
scale
- module width, in pixels (default: 3)ratio
- module height to width ratio (default: 3)padding
- image padding, in pixels (default: 20)fg_color
- foreground color (default:#000000
)bg_color
- background color (default:#FFFFFF
)
Note
A module is the smallest element of a barcode, analogous to a pixel. Modules in a PDF417 bar code are tall and narrow.
The function returns a Pillow Image object containing the barcode.
Colors can be specified as hex codes or using HTML color names.
codes = encode(text, columns=3)
image = render_image(codes, scale=5, ratio=2, padding=5, fg_color="Indigo", bg_color="#ddd")
image.show()
The render_svg
function takes the following options:
scale
- module width, in pixels (default: 3)ratio
- module height to width ratio (default: 3)padding
- image padding, in pixels (default: 20)color
- foreground color (default: #000000)
The function returns a ElementTree object containing the barcode in SVG format.
Unlike render_image
, this function does not take a background color option.
The background is left transparent.
codes = encode(text, columns=3)
svg = render_svg(codes, scale=5, ratio=2, color="Seaweed")
svg.write('barcode.svg')
## See also
- pdf417-php - a PHP implementation
- golang-pdf417 - a Go implementation