A library to generate Swiss QR-bill payment slips
Project description
Python library to generate Swiss QR-bills
From 2020, Swiss payment slips will progressively be converted to the QR-bill format. Specifications can be found on https://www.paymentstandards.ch/
This library is aimed to produce properly-formatted QR-bills as SVG files either from command line input or by using the QRBill class.
Installation
You can easily install this library with:
$ pip install qrbill
Command line usage example
Minimal:
$ qrbill --account "CH5800791123000889012" --creditor-name "John Doe" --creditor-postalcode 2501 --creditor-city "Biel"
More complete:
$ qrbill --account "CH44 3199 9123 0008 8901 2" --reference-number "210000000003139471430009017" --creditor-name "Robert Schneider AG" --creditor-street "Rue du Lac 1268" --creditor-postalcode "2501" --creditor-city "Biel" --additional-information "Bill No. 3139 for garden work and disposal of cuttings." --debtor-name "Pia Rutschmann" --debtor-street "Marktgasse 28" --debtor-postalcode "9400" --debtor-city "Rorschach" --language "de"
For usage:
$ qrbill -h
If no –output SVG file path is specified, the SVG file will be named after the account and the current date/time and written in the current directory.
Note that if you don’t like the automatic line wrapping in the human-readable part of some address, you can replace a space by a newline sequence in the creditor or debtor name, line1, line2, or street to force a line break in the printed addresses. (e.g. –creditor-street “Rue des Quatorze Contours du Cheminndu Creux du Van”) The data encoded in the QR bill will not have the newline character. It will be replaced by a regular space.
Python usage example
>>> from qrbill import QRBill >>> my_bill = QRBill( account='CH5800791123000889012', creditor={ 'name': 'Jane', 'pcode': '1000', 'city': 'Lausanne', 'country': 'CH', }, amount='22.45', ) >>> bill.as_svg('/tmp/my_bill.svg')
Outputting as PDF or bitmap
If you want to produce a PDF version of the resulting bill, we suggest using the svglib <http://mirror-pypi-de.runflare.com/project/svglib/> library. It can be used on the command line with the svg2pdf script, or directly from Python:
>>> import tempfile >>> from qrbill import QRBill >>> from svglib.svglib import svg2rlg >>> from reportlab.graphics import renderPDF >>> my_bill = QRBill( account='CH5800791123000889012', creditor={ 'name': 'Jane', 'pcode': '1000', 'city': 'Lausanne', 'country': 'CH', }, amount='22.45', ) >>> with tempfile.TemporaryFile(encoding='utf-8', mode='r+') as temp: >>> my_bill.as_svg(temp) >>> temp.seek(0) >>> drawing = svg2rlg(temp) >>> renderPDF.drawToFile(drawing, "file.pdf")
or to produce a bitmap image output:
>>> from reportlab.graphics import renderPM >>> dpi = 300 >>> drawing.scale(dpi/72, dpi/72) >>> renderPM.drawToFile(drawing, "file.png", fmt='PNG', dpi=dpi)
Running tests
You can run tests either by executing:
$ python tests/test_qrbill.py
or:
$ python setup.py test
Sponsors
ChangeLog
1.0.0 (2022-09-21)
BREAKING: Removed the due-date command line argument and the due_date QRBill init kwarg, as this field is no longer in the most recent specs (#84).
Handle line breaks in additional information, so it is showing in the printed version, but stripped from the QR data (#86).
Improved performance by deactivating debug mode in svgwrite (#82).
0.8.1 (2022-05-10)
Fixed a regression where the currency was not visible in the payment part (#81).
0.8.0 (2022-04-13)
Replaced ## with // as separator in additional informations (#75).
Print scissors symbol on horizontal separation line when not in full page. WARNING: the resulting bill is 1 millimiter higher to be able to show the entire symbol (#65).
Renamed --extra-infos command line parameter to --additional-information and renamed extra_infos and ref_number QRBill.__init__ arguments to additional_information and reference_number, respectively. The old arguments are still accepted but raise a deprecation warning (#68).
0.7.1 (2022-03-07)
Fixed bad position of amount rect on receipt part (#74).
Increased title font size and section spacing on payment part.
0.7.0 (2021-12-18)
License changed from GPL to MIT (#72).
Prevented separation line filled on some browsers.
Scissors symbol is now an SVG path (#46).
0.6.1 (2021-05-01)
Added --version command-line option.
QR-code size is now more in line with the specs, including the embedded Swiss cross (#58, #59).
Widen space at the right of the QR-code (#57).
A new --font-factor command-line option allows to scale the font if the actual size does not fit your needs (#55).
0.6.0 (2021-02-11)
Added the possibility to include newline sequences in name, street, line1, or line2 part of addresses to improve printed line wrapping of long lines.
Moved QR-code and amount section to better comply with the style guide (#52).
Dropped support for EOL Python 3.5 and confirmed support for Python 3.9.
0.5.3 (2021-01-25)
Enforced black as swiss cross background color.
Allowed output with extension other than .svg (warning instead of error).
Split long address lines to fit in available space (#48).
0.5.2 (2020-11-17)
Final creditor is only for future use, it was removed from command line parameters.
Capitalized Helvetica font name in code (#43).
The top line was printed a bit lower to be more visible (#42).
0.5.1 (2020-08-19)
Fix for missing country field in QR code when using CombinedAddress (#31).
Added support for printing bill to full A4 format, using the full_page parameter of QRBill.as_svg() or the CLI argument --full-page.
The vertical separation line between receipt and main part can be omitted through the --no-payment-line CLI argument.
A new --text command line parameter allows for a raw text output.
Support for Alternate procedures lines was added (--alt-procs argument, #40).
0.5 (2020-06-24)
QRBill.as_svg() accepts now file-like objects.
Added support for combined address format.
A top separation line is now printed by default. It can be deactivated through the top_line boolean parameter of QRBill.__init__().
The error correction level of the QR code conforms now to the spec (M).
0.4 (2020-02-24)
Changes were not logged until version 0.4. Development stage was still alpha.
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.