Package: qrbill
Python library to generate Swiss QR-billsFrom 2020, Swiss payment slips will progressively be converted to the
QR-bill format.
Specifications can be found onhttps://www.paymentstandards.ch/This library is aimed to produce properly-formatted QR-bills as SVG files
either from command line input or by using theQRBillclass.InstallationYou can easily install this library with:$ pip install qrbillCommand line usage exampleMinimal:$ 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 -hIf no–outputSVG 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 willnothave 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',
    )
>>> my_bill.as_svg('/tmp/my_bill.svg')Outputting as PDF or bitmapIf you want to produce a PDF version of the resulting bill, we suggest using thesvglib <https://pypi.org/project/svglib/>library. It can be used on the
command line with thesvg2pdfscript, 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 testsYou can run tests either by executing:$ python tests/test_qrbill.pyor:$ python setup.py testSponsorsChangeLog1.1.0 (2023-12-16)Add Arial font name in addition to Helvetica for better font fallback on some
systems.Drop support for Python < 3.8, and add testing for Python 3.11 and 3.12.1.0.0 (2022-09-21)BREAKING: Removed thedue-datecommand line argument and thedue_dateQRBill 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-infoscommand line parameter to--additional-informationand renamedextra_infosandref_numberQRBill.__init__arguments
toadditional_informationandreference_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--versioncommand-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-factorcommand-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 thefull_pageparameter ofQRBill.as_svg()or the CLI argument--full-page.The vertical separation line between receipt and main part can be omitted
through the--no-payment-lineCLI argument.A new--textcommand line parameter allows for a raw text output.Support for Alternate procedures lines was added (--alt-procsargument,
#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 thetop_lineboolean parameter ofQRBill.__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.