This commit is contained in:
Beat Jäckle 2021-12-21 20:21:04 +01:00
parent 308ccd5a6c
commit 2481e01e26
4 changed files with 109 additions and 19 deletions

31
Beispiel.txt Normal file
View file

@ -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

View file

@ -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:

62
qrr.cairo.py Executable file
View file

@ -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))

25
qrr.py
View file

@ -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