Blabel is a Python package to generate labels (typically for printing stickers) with barcodes and other niceties.
Some features:
- Generates PDF files where each page is a label (that's the way most label printers want it).
- Label layout is defined by HTML (Jinja) templates and CSS. Supports any page dimensions and margins.
- Builtin support for various barcodes, QR-codes, datamatrix, and more (wraps other libraries).
- Labels data can be provided as list of dicts (easy to generate from spreadsheets).
- Possibility to print several items per sticker.
To generate labels with Blabel you first need a HTML/Jinja template, and optionally a style sheet, to define how your labels will look like.
HTML item template (item_template.html
)
Notice the use of label_tools
(Blabel's builtin features). The variables
sample_name
and sample_id
will be defined at label creation time.
<img src="{{label_tools.qr_code(sample_id)}}"/>
<span class='label'>
{{ sample_name }} <br/>
Made with blabel <br/>
{{ label_tools.now() }}
</span>
CSS stylesheet (style.css
)
Notice the CSS @page
attributes which allows you to adjust the page format
to the dimensions of your sticker.
Also notice the pixelated
image rendering. If your printer is black/white
only with no greyscale support, this option will ensure crisp-looking barcodes,
qr codes, etc.
@page {
width: 27mm;
height: 7mm;
padding: 0.5mm;
}
img {
height: 6.4mm;
display: inline-block;
vertical-align: middle;
image-rendering: pixelated;
}
.label {
font-family: Verdana;
font-weight: bold;
vertical-align: middle;
display: inline-block;
font-size: 7px;
}
Python code
In your Python script, create a LabelWriter
linked to the two files above,
and feed it a list of of dicts ("records"), one for each label to print:
from blabel import LabelWriter
label_writer = LabelWriter("item_template.html",
default_stylesheets=("style.css",))
records= [
dict(sample_id="s01", sample_name="Sample 1"),
dict(sample_id="s02", sample_name="Sample 2")
]
label_writer.write_labels(records, target='qrcode_and_label.pdf')
Result:
- Example with a barcode and a dynamically generated picture
- Ugly example with a logo and a datamatrix
- Example with date and QR code (sources of the example above)
- Example where the label data is read from spreadsheets
- Example where several items are printed on each page/sticker
You can install Blabel via PIP:
pip install blabel
Alternatively, you can unzip the sources in a folder and type:
python setup.py install
Note: the package depends on the WeasyPrint Python package. If there are any issues, see installation instructions in the WeasyPrint documentation.
If you have an older GNU/Linux distribution (e.g. Ubuntu 18.04), then install an older WeasyPrint (<=52),
as they don't have the latest Pango that is required by the latest WeasyPrint: pip install weasyprint==52
Note: on macOS, you may need to first install pango with brew install pango
.
Note: on some Debian systems you may need to first install libffi-dev (apt install libffi-dev
).
The package name may be libffi-devel on some systems.
DnaChisel is an open-source software originally written at the Edinburgh Genome Foundry by Zulko and released on Github under the MIT licence (Copyright 2018 Edinburgh Genome Foundry). Everyone is welcome to contribute!
![https://raw.githubusercontent.com/Edinburgh-Genome-Foundry/Edinburgh-Genome-Foundry.github.io/master/static/imgs/logos/egf-codon-horizontal.png](https://raw.githubusercontent.com/Edinburgh-Genome-Foundry/Edinburgh-Genome-Foundry.github.io/master/static/imgs/logos/egf-codon-horizontal.png)
Blabel was originally written to print labels for biological samples and is part of the EGF Codons synthetic biology software suite for DNA design, manufacturing and validation.