Barcode rendering for Python supporting QRcode, Aztec, PDF417, I25, Code128, Code39 and many more types.
Project description
A cleverly named, but very simple python barcode renderer wrapping the BWIPP library and ghostscript command line tool.
Installation
Install from pip:
pip install treepoem
Python 3.5 to 3.8 supported.
You’ll also need Ghostscript installed. On Ubuntu/Debian this can be installed with:
apt-get install ghostscript
On Mac OS X use:
brew install ghostscript
Otherwise refer to your distribution’s package manager, though it’s likely to be called ghostscript too.
There’s a known issue with rendering on Ghostscript 9.22+ where images are smeared. See GitHub Issue #124 and its associated links for more details. Ghostscript merged a fix in version 9.26 and common barcodes seem to work from then on, though still with some smearing.
You can check your Ghostscript version with:
gs --version
API
generate_barcode(barcode_type, data, options=None)
Generates a barcode and returns it as a PIL image file object (specifically, a PIL.EpsImagePlugin.EpsImageFile).
barcode_type is the name of the barcode type to generate (see below).
data is a str (Python 2 unicode) or bytes (Python 2 bytes) of data to embed in the barcode - the amount that can be embedded varies by type.
options is a dictionary of strings-to-strings of extra options to be passed to BWIPP, as per its docs.
For example, this generates a QR code image, and saves it to a file using standard PIL Image.save():
>>> import treepoem
>>> image = treepoem.generate_barcode(
... barcode_type='qrcode', # One of the BWIPP supported codes.
... data='barcode payload',
... )
>>> image.convert('1').save('barcode.png')
If your barcode image is monochrome, with no additional text or coloring, converting the Image object to monochrome as shown above (image.convert('1')) will likely reduce its file size.
barcode_types
This is a dict of the ~100 names of the barcode types that the vendored version of BWIPP supports: its keys are strs of the barcode type encoder names, and the values are instances of BarcodeType.
BarcodeType
A class representing meta information on the types. It has two attributes:
type_code - the value needed for the barcode_type argument of generate_barcode() to use this type.
description - the human level description of the type which has two str.
Only these common types are used in the test suite:
qrcode - QR Code
azteccode - Aztec Code
pdf417 - PDF417
interleaved2of5 - Interleaved 2 of 5
code128 - Code 128
code39 - Code 39
Command-line interface
Treepoem also includes a simple command-line interface to the functionality of generate_barcode. For example, these commands will generate two QR codes with identical contents, but different levels of error correction (see QR Code Options):
$ treepoem -o barcode1.png -t qrcode "This is a test" eclevel=H
$ treepoem -o barcode2.png -t qrcode "^084his is a test" eclevel=L parse
Complete usage instructions are shown with treepoem --help.
What’s so clever about the name?
Barcode.
Bark ode.
Tree poem.
Updating BWIPP
For development of treepoem, when there’s a new BWIPP release:
Download the latest monolithic zip file from https://github.com/bwipp/postscriptbarcode/releases
Unzip the files into src/treepoem/postscriptbarcode
Remove the unneded docs subdirectory.
Run make_data.py from the root of the repo to update the barcode types that treepoem knows about.
Add a CHANGELOG note about the upgrade.
Commit and make a pull request, for examples see https://githugb.com/adamchainz/treepoem/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aclosed+upgrade+bwipp
History
3.3.1 (2020-02-04)
Update allowed barcode list to add missing types from new versions of BWIPP.
3.3.0 (2019-12-21)
Upgrade BWIPP from 2019-08-05 to 2019-11-08. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
3.2.0 (2019-12-19)
Upgrade BWIPP from 2019-04-24 to 2019-08-05. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
Converted setuptools metadata to configuration file. This meant removing the __version__ attribute from the package. If you want to inspect the installed version, use importlib.metadata.version("treepoem") (docs / backport).
Update Python support to 3.5-3.8.
3.1.0 (2019-06-25)
Update Python support to 3.5-3.7, as 3.4 has reached its end of life.
Upgrade BWIPP from 2017-07-27 to 2019-04-24. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
3.0.0 (2019-05-08)
Drop Python 2 support, only Python 3.4+ is supported now.
Upgrade BWIPP from 2017-05-20 to 2018-07-27. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
2.0.0 (2018-08-04)
Support binary barcode data - if bytes (str on Python 2) is passed as data, it’s not encoded. This has introduced a dependency on six. This may be backwards incompatible, depending on what type of data you’re passing in on Python 2.
Make treepoem.barcode_types a dict mapping the BWIPP encoder names to a custom type containing a human-readable description. This is backwards incompatible if you’re relying on barcode_types which previously was a set of the encoder names.
Upgrade BWIPP from 2017-10-19 to 2018-05-20. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
1.4.1 (2018-05-01)
Fix formatting bug in CLI output.
1.4.0 (2018-05-01)
Make the options argument to generate_barcode optional.
Add a CLI treepoem.
Upgrade BWIPP from 2017-07-10 to 2017-10-19. This has a few bug fixes and performance improvements. You can read its changelog in the vendored copy in the treepoem repo.
1.3.2 (2017-10-22)
Upgrade BWIPP from 2017-07-10 to 2017-10-19. This has a few bug fixes. You can read its changelog in the vendored copy in the treepoem repo.
1.3.1 (2017-08-24)
Upgrade BWIPP from 2017-06-20 to 2017-07-10. This has a few bug fixes. You can read its changelog in the vendored copy in the treepoem repo.
1.3.0 (2017-06-21)
Upgrade BWIPP from 2015-11-24 to 2017-06-20. This has a number of bug fixes, and supports more barcode types. It has also changed the pixel-for-pixel output of some formats, although they still encode the same information - notably QR codes, which are tested in treepoem's test suite. You can read its changelog in the vendored copy in the treepoem repo.
1.2.0 (2017-06-21)
Add treepoem.barcode_types, a set of all the names of supported barcode types, and error if asked to generate a barcode of an unknown type.
1.1.0 (2017-04-13)
Support Windows.
1.0.1 (2016-03-30)
Add the missing BWIPP files.
1.0.0 (2016-03-23)
Use $PATH to find gs binary.
Rename PostscriptError to TreepoemError.
Add basic setup.py.
Setup Travis CI build.
Setup Tox
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.