Einführung
So ein Girocode auf einer Rechnung ist eigentlich sehr praktisch. Eine geeignete Banking-App übernimmt automatisch alle Daten und man spart sich die mühsame Eingabe der IBAN und der anderen Daten.
Mit Hilfe von PrintMulti und dessen Fähigkeiten ist es möglich
- die relevanten Daten aus dem gerade druckenden Job zu extrahieren
- ein Skript aufzurufen, das den QR-Code Code erzeugt und
- diesen beim Drucken (auch auf PDF-Drucker) in das Dokument einzubetten.
Es werden zwei unterschiedliche Methoden im mitgeliefertem Beispiel angeboten um den QR-Code zu erzeugen.
- Mittels eines Powershell-Skripts und dem Tool zint.
- Mit Hilfe eines Python-Skript und dem Modul ’segno‘
Alle Beispiele mit versteckten Texten bieten die Möglichkeit beim Drucken auf den Drucker „XRechnung“ automatisch einen Girocode in die erzeugte ZUGFeRD Rechnung einzubetten.
Vor- und Nachteile und Installationsanweisungen (auch für PrintMulti) finden Sie in der PrintMulti_XRechnung_de.pdf Datei. Dort sind auch die Schritte im Einzelnen erklärt, wie man den Girocode in der Konfigurationsdatei aktivieren kann.
So funktioniert’s
So sieht es am Ende aus. Im Beispiel ist der Girocode aber oben rechts angeordnet. Das kann leicht angepasst werden.
Die relevanten Texte sind rot umrahmt. Im Beispiel ist der Verwendungszweck eine Kombination der Rechnungsnummer und des Empfängers

Im folgenden Bild sind die versteckten Texte sichtbar (durch Makro oder Ändern der Formatvorlage).

Folgende Zeilen in der PrintMultiRechnung.ini sind für die Extraktion zuständig:
invoicenr=$(;rawpage;\[01\]([^⁞]*)⁞;1;regex)
amount=$(;rawpage;"\\[115\\]([^⁞]*)⁞";1;regex)
buyer=$(;rawpage;\[44\]([^⁞]*)⁞;1;regex)
iban=$(;rawpage;\[84\]([^⁞]*)⁞;1;regex)
bic=$(;rawpage;"\\[86\\]([^⁞]*)⁞";1;regex)
nf=$(;rawpage;"\\[NF\\]([^⁞]*)⁞";1;regex)
currency=$(;rawpage;"\\[05\\]([^⁞]*)⁞";1;regex)
owner=$(;rawpage;"\\[85\\]([^⁞]*)⁞";1;regex)
- „rawpage“ ist der Textinhalt des kompletten Dokuments. Alle erkannten Texte werden ohne Trenner in einer Zeile pro Seite verwendet. Ein Ausschnitt sieht z.B: so aus:
RECHNUNG [01]2025-0001⁞[03]INVOICE⁞DATUM [02]01.03.2024⁞Käuferreferenz:[10]991-33333TEST-33⁞ - Die eckigen Klammern müssen durch „\[“ und „\]“ escaped werden.
- Auf den erkannte Text innerhalb der runden Klammern kann über den Index zugegriffen werden. Hier gibt es nur eine rundes Klammerpaar, insofern kann nur die 1 verwendet werden.
- Das „⁞“ ist einfach ein seltenes Zeichen aus dem Unicode-Zeichensatz, das als Trenner verwendet wird. Es werden also beliebig viele Zeichen außer dem Trennzeichen bis zu einem Trennzeichen an die jeweiligen Werte auf der linken Seite zugewiesen.
- In der Kommandozeile wird mittels @“#(xxx)I“ auf den Wert zugegriffen. Falls eine Variable mit einem „!“ anfängt, dann wird sie als Umgebungsvariable gesetzt und man kann mittels %xxx% darauf zugreifen. Das funktioniert nur nicht mit leeren Texten.
- Bei Definitionen zwischen @“…“ bleiben die Anführungszeichen erhalten und Escape-Sequencen werden nicht ersetzt.
- In der PrintMulti Logdatei „DbgLog.csv“ sind alle Extraktionen und der Aufruf des Skripts ggf. zu sehen.
Mögliche Anpassungen
Die Position des Girocodes muss mit Sicherheit auf das Layout Ihrer Rechnung angepasst werden. Die entsprechenden Werte X,Y, Align und Height sind selbsterklärend und finden sich im Abschnitt [QRImage].
[QRImage]
Active=%CreateGiroCode%
Type=Image
Foreground=0
Source=%QRFile%
X=18cm
Y=1cm
Align=Left
Height=2cm
Der Verwendungszweck wird hier zusammengesetzt. In vielen Fällen reicht vermutlich die Rechnungsnummer:
purpose="#(invoicenr)I,#(buyer)I"
Auswahl des Verfahrens
Sie können zwischen einem Powershell-Skript und einem Python-Skript in der Ini wählen. Andere Skriptsprachen können ggf. über die gleiche Art angebunden werden.
Aktivieren Sie den entsprechenden ExecuteCmd Befehl durch Kommentieren der nicht verwendeten Befehle.
ExecuteCmd= powerShell.exe -File @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.ps1" -FileName @"%QRFile%" …
;ExecuteCmd="%PythonPath%" @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.py" --filename @"%QRFile%" …
;ExecuteCmd=py @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.py" --filename @"%QRFile%" …
Details zur Installation und Fallstricke finden Sie hier: PrintMulti_XRechnung_de.pdf
Girocode ohne ZUGFeRD Rechnung
Die mit dem ZUGFeRD-Composer mitgelieferten Beispiele mit versteckten Texten erlauben eine einfache Einbettung eines Girocodes, da die Extraktion der notwendigen Daten sehr einfach ist.
Das funktioniert auch mit anderen Rechnungen, sofern die relevanten Daten extrahiert werden können. Normalerweise sind die Kontodaten fix, sodass nur der Verwendungszweck und der Betrag aus der Rechnung extrahiert werden müssen.
Im Beispiel „invoice_two_vat_girocode_only.odt“ wurden alle versteckten Texte entfernt. Wenn Sie einen Blick in die extrahierten Texte im „C:\ZUGFeRD\Temp“ Verzeichnis werfen, stellen Sie fest, dass die Rechnungsnummer (=Verwendungszweck) und der Betrag extrahiert werden können.
Die relevanten Stellen sind (Leerstellen am Anfang und Ende werden von den Girocode Skripten entfernt)
...RECHNUNG: 2025-0001DATUM:...0,00€FÄLLIGER BETRAG1004,66€Zahlung...
Es gibt auch eine „PrintMulti_Girocode.ini„, die entsprechend vorbereitet ist. Sie verlangt einen PrintMulti Drucker „Girocode“.
Der wichtige Abschnitt ist hier („purpose“, „amount“ aus dem Rechnungstext; der Rest ist fix)
purpose=$(;rawpage;RECHNUNG:([^DATUM])DATUM;1;regex)
amount=$(;rawpage;FÄLLIGER BETRAG"([^€])€;1;regex)
owner="Gustav Gansöäü"
iban="DE75 5121 0800 1245 1261 99"
bic="GENOKDKSJFG"
nf="DE-de"
currency="EUR"
Der Kontoinhaber kann auch Umlaute enthalten. Die Girocode Definition erlaubt aber nicht die Verwendung aller Unicode Zeichen aus dem Zeichensatz. Die PDF Rechnung enthält einen anderen Kontoinhaber.