diff --git a/Beispiel.txt b/Beispiel.txt new file mode 100644 index 0000000..bb1ba55 --- /dev/null +++ b/Beispiel.txt @@ -0,0 +1,31 @@ +SPC +0200 +1 +CH2480808009320210528 +S +Jäckle Data Management GmbH +Rodelstrasse +39 +8266 +Steckborn +CH + + + + + + + + +CHF + + + + + + + +NON + +Spende an die Entwickler von qrr.py +EPD diff --git a/README.md b/README.md index 1356364..a964128 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,15 @@ SVG Datei daraus. Zuerst müssen Sie [Python3](https://www.python.org/) für Ihr Betriebssystem installieren. -Mit `pip3 install --user qrcode svgutils cairosvg` können sie sich die +Mit `pip3 install --user qrcode svgutils chardet` können sie sich die notwendigen Pakete herunterladen. +Für die Cario Version `qrr.cario.py` muss auch +`pip3 install --user cairosvg` +installiert werden. Diese Version kann die QR Rechunung als png oder pdf +exportieren. + + ## Ausführen des Programms Mit `python3 qrr.py Rechnung1.txt Rechnung1.svg` wird das Porgramm @@ -22,7 +28,9 @@ gestartet. Wenn das Programm keinen Output generiert, so gab es keine Fehler und die SVG Datei sollte erstellt sein. + # CH-Kreuz + Diese Graphik ist von [SIX Group AG]( https://www.paymentstandards.ch/de/home/software-partner.html) zur Verfügung gestellt. Der direkte Download ist dieser: diff --git a/qrr.cairo.py b/qrr.cairo.py new file mode 100755 index 0000000..db4cc5d --- /dev/null +++ b/qrr.cairo.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +from cairosvg import (svg2pdf, svg2png) +from qrr import qr_rechnung + +def help(args): + return '\n'.join([ + '{0}: Ungültige Eingabe', + 'Aufruf: {0} TEXTDATEI [SVG-ZIELDATEI]', + 'Alternativ kann die ZIELDATEI auch mit .pdf oder .png enden.' + ]).format(args[0]) + + +def main(args): + try: + textfile = args[1] + except IndexError: + print(help(args)) + return 1 + try: + output_format = 'svg' + svgfile = args[2] + if svgfile[-4:] == '.svg': + pass + elif svgfile[-4:] == '.png': + svgfile = svgfile[:-4]+'.svg' + output_format = 'png' + + elif svgfile[-4:] == '.pdf': + svgfile = svgfile[:-4]+'.svg' + output_format = 'pdf' + else: + svgfile += '.svg' + except IndexError: + try: + assert textfile[-4:] == '.txt' + svgfile = textfile[:-4]+'.svg' + except AssertionError: + print(help(args)) + return 1 + try: + x = qr_rechnung(textfile=textfile) + x.write_file(svgfile, force=False) + except (PermissionError, FileNotFoundError) as e: + print(e) + return 1 + if output_format == 'svg': + return 0 + elif output_format == 'png': + svg2png(url=svgfile, write_to=svgfile[:-4]+'.png', dpi=600) + return 0 + elif output_format == 'pdf': + svg2pdf(url=svgfile, write_to=svgfile[:-4]+'.pdf') + return 0 + else: + print(f"ERROR: Unbekanntes Output_format: {output_format}") + return 1 + + +if __name__ == '__main__': + import sys + sys.exit(main(sys.argv)) diff --git a/qrr.py b/qrr.py index 2bfeee1..6787e18 100755 --- a/qrr.py +++ b/qrr.py @@ -1,13 +1,13 @@ #!/usr/bin/env python3 import os.path -import qrcode +from qrcode import make as qrcode_make import qrcode.image.svg from svgutils import transform as st from ch_kreuz import swisscross as get_swisscross from ch_kreuz import white as get_white from svgutils.compose import Figure -from cairosvg import (svg2pdf, svg2png) +from chardet import detect class qr_rechnung(): @@ -20,10 +20,13 @@ class qr_rechnung(): def set_data(self, data): self.data = data + self.data = data.encode('latin-1') def set_data_from_textfile(self, textfile): - with open(textfile, 'r') as f: - self.data = f.read() + with open(textfile, 'rb') as rawdata: + charenc = detect(rawdata.read())['encoding'] + with open(textfile, 'r', encoding=charenc) as f: + self.set_data(f.read()) def write_file(self, filepath, force=False): global qrcode @@ -62,7 +65,6 @@ def help(args): return '\n'.join([ '{0}: Ungültige Eingabe', 'Aufruf: {0} TEXTDATEI [SVG-ZIELDATEI]', - 'Alternativ kann die ZIELDATEI auch mit .pdf oder .png enden.' ]).format(args[0]) @@ -77,13 +79,6 @@ def main(args): svgfile = args[2] if svgfile[-4:] == '.svg': pass - elif svgfile[-4:] == '.png': - svgfile = svgfile[:-4]+'.svg' - output_format = 'png' - - elif svgfile[-4:] == '.pdf': - svgfile = svgfile[:-4]+'.svg' - output_format = 'pdf' else: svgfile += '.svg' except IndexError: @@ -101,12 +96,6 @@ def main(args): return 1 if output_format == 'svg': return 0 - elif output_format == 'png': - svg2png(url=svgfile, write_to=svgfile[:-4]+'.png', dpi=600) - return 0 - elif output_format == 'pdf': - svg2pdf(url=svgfile, write_to=svgfile[:-4]+'.pdf') - return 0 else: print(f"ERROR: Unbekanntes Output_format: {output_format}") return 1