<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>EPC-QR-Code &#8211; LVBPrint Homepage</title>
	<atom:link href="https://www.lvbprint.de/en/tag/epc-qr-code/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.lvbprint.de/en</link>
	<description>Software für Druckerlösungen</description>
	<lastbuilddate>Mon, 26 Jan 2026 17:00:35 +0000</lastbuilddate>
	<language>en-GB</language>
	<sy:updateperiod>
	hourly	</sy:updateperiod>
	<sy:updatefrequency>
	1	</sy:updatefrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.lvbprint.de/wp-content/uploads/2021/05/LVBCropTrans.png</url>
	<title>EPC-QR-Code &#8211; LVBPrint Homepage</title>
	<link>https://www.lvbprint.de/en</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>100% automated EPC QR code (Girocode) embedding directly in the invoice printing process</title>
		<link>https://www.lvbprint.de/en/2026/01/15/auto-girocode/</link>
		
		<dc:creator><![CDATA[dieter]]></dc:creator>
		<pubdate>Thu, 15 Jan 2026 17:44:54 +0000</pubdate>
				<category><![CDATA[ZUGFeRD Composer]]></category>
		<category><![CDATA[PrintMulti]]></category>
		<category><![CDATA[PrintMulti Examples]]></category>
		<category><![CDATA[Einbetten]]></category>
		<category><![CDATA[EPC-QR-Code]]></category>
		<category><![CDATA[Girocode]]></category>
		<category><![CDATA[QR-Code]]></category>
		<category><![CDATA[zugferd]]></category>
		<guid ispermalink="false">https://www.lvbprint.de/?p=1887</guid>

					<description><![CDATA[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<div class="btn btn-light btn-arrow"><a href="https://www.lvbprint.de/en/2026/01/15/auto-girocode/" rel="nofollow" title="Read More">Read More</a></div>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">Introduction</h2>


<p>A Girocode on an invoice is actually very practical. A suitable banking app automatically transfers all the data, saving you the hassle of entering your IBAN and other details.</p>
<p>With the help of PrintMulti and its capabilities, it is possible to</p>
<ul>
<li>extract the relevant data from the job currently being printed</li>
<li>call a script that generates the QR code and</li>
<li>embed it in the document when printing (including on PDF printers).</li>
</ul>
<p>Two different methods are offered in the example provided to generate the QR code.</p>
<ol>
<li>Using a PowerShell script and the tool <a href="https://sourceforge.net/projects/zint/" target="_blank" rel="noopener">zint</a>.</li>
<li>Mit Hilfe eines Python-Skript und dem Modul &#8217;segno&#8216;</li>
</ol>
<p class="translation-block">All <a>examples with hidden text</a> offer the option of automatically embedding a Girocode in the generated ZUGFeRD invoice when printing to the ’XRechnung" printer.</p>
<p class="translation-block">Advantages, disadvantages and installation instructions (also for PrintMulti) can be found in the <a href="https://www.lvbprint.de/files/zugferd/PrintMulti_XRechnung_en.pdf" target="_blank" rel="noopener">PrintMulti_XRechnung_en.pdf</a> file. This file also explains in detail the steps required to activate the Girocode in the configuration file.</p>


<h2 class="wp-block-heading">So funktioniert&#8217;s</h2>



<p class="translation-block">This is what it looks like in the end. In the example, however, the Girocode is located at the top right. This can be easily adjusted. The relevant texts are framed in red. In the example, the purpose of use is a combination of the invoice number and the recipient.</p>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="959" height="928" src="https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodePDF.png" alt="GiroCodePDF" class="wp-image-1890" style="aspect-ratio:1.0334010275321612;width:625px;height:auto" title="100% automatisierte EPC-QR-Code (Girocode)-Einbettung direkt im Rechnungs-Druckprozess 1" srcset="https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodePDF.png 959w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodePDF-300x290.png 300w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodePDF-768x743.png 768w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodePDF-12x12.png 12w" sizes="(max-width: 959px) 100vw, 959px" /></figure>



<p>The following image shows the hidden text (using a macro or by changing the style sheet).</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="883" height="883" src="https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal.png" alt="GiroCodeOriginal" class="wp-image-1891" style="width:732px;height:auto" title="100% automatisierte EPC-QR-Code (Girocode)-Einbettung direkt im Rechnungs-Druckprozess 2" srcset="https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal.png 883w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal-300x300.png 300w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal-150x150.png 150w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal-768x768.png 768w, https://www.lvbprint.de/wp-content/uploads/2026/01/GiroCodeOriginal-12x12.png 12w" sizes="(max-width: 883px) 100vw, 883px" /></figure>



<p>The following lines in PrintMultiRechnung.ini are responsible for the extraction:</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<pre class="wp-block-code"><code><code>invoicenr=$(;rawpage;\&#91;01\](&#91;^⁞]*)⁞;1;regex)
amount=$(;rawpage;"\\&#91;115\\](&#91;^⁞]*)⁞";1;regex)
buyer=$(;rawpage;\&#91;44\](&#91;^⁞]*)⁞;1;regex)
iban=$(;rawpage;\&#91;84\](&#91;^⁞]*)⁞;1;regex)
bic=$(;rawpage;"\\&#91;86\\](&#91;^⁞]*)⁞";1;regex)
nf=$(;rawpage;"\\&#91;NF\\](&#91;^⁞]*)⁞";1;regex)
currency=$(;rawpage;"\\&#91;05\\](&#91;^⁞]*)⁞";1;regex)
owner=$(;rawpage;"\\&#91;85\\](&#91;^⁞]*)⁞";1;regex)</code></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<ul class="wp-block-list">
<li class="translation-block">‘rawpage’ is the text content of the entire document. All recognised texts are used without separators in one line per page. An excerpt looks like this, for example:<br><pre><span style="white-space: pre-wrap"><code>INVOICE [01]2025-0001⁞⁞[03]INVOICE⁞DATUM [02]01.03.2024⁞Käuferreferenz:[10]991-33333TEST-33⁞</code></span></pre></li>



<li>Die eckigen Klammern müssen durch &#8222;\[&#8220; und &#8222;\]&#8220; escaped werden.&nbsp;</li>



<li>The recognised text within the round brackets can be accessed via the index. There is only one pair of round brackets here, so only 1 can be used.</li>



<li class="translation-block">The ‘⁞’ is simply a rare character from the Unicode character set that is used as a separator. This means that any number of characters except for the separator are assigned to the respective values on the left-hand side up to a separator.</li>



<li>In der Kommandozeile wird mittels @&#8220;#(xxx)I&#8220; auf den Wert zugegriffen. Falls eine Variable mit einem &#8222;!&#8220; anfängt, dann wird sie als Umgebungsvariable gesetzt und man kann mittels %xxx% darauf zugreifen. Das funktioniert nur nicht mit leeren Texten.&nbsp;</li>



<li>Bei Definitionen zwischen @&#8220;&#8230;&#8220; bleiben die Anführungszeichen erhalten und Escape-Sequencen werden nicht ersetzt.&nbsp;</li>



<li>In der PrintMulti Logdatei &#8222;DbgLog.csv&#8220; sind alle Extraktionen und der Aufruf des Skripts ggf. zu sehen.</li>
</ul>



<h2 class="wp-block-heading">Possible adjustments</h2>



<p>The position of the Girocode must be adjusted to match the layout of your invoice. The corresponding values X, Y, Align and Height are self-explanatory and can be found in the [QRImage] section.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<pre class="wp-block-code"><code><code><code><strong>&#91;QRImage]</strong>
Active=%CreateGiroCode%
Type=Image
Foreground=0
Source=%QRFile%
<strong>X=18cm
Y=1cm
Align=Left
Height=2cm</strong></code></code></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>The intended use is specified here. In many cases, the invoice number is probably sufficient:</p>



<pre class="wp-block-code"><code><code><code><code><strong>purpose="#(invoicenr)I,#(buyer)I"</strong></code></code></code></code></pre>



<h2 class="wp-block-heading">Selection of the procedure</h2>



<p>You can choose between a Powershell script and a Python script in the ini file. Other scripting languages can be connected in the same way if necessary.</p>



<p>Activate the corresponding ExecuteCmd command by commenting out the unused commands.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<pre class="wp-block-code"><code><strong>ExecuteCmd= powerShell.exe -File @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.ps1" -FileName @"%QRFile%" …</strong>
;ExecuteCmd="%PythonPath%" @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.py" --filename @"%QRFile%" …
;ExecuteCmd=py @"%BasePath%\PrintMulti\Girocode\CreateGiroQRCode.py" --filename @"%QRFile%" …</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="translation-block">Details on installation and pitfalls can be found here: <a href="https://www.lvbprint.de/files/zugferd/PrintMulti_XRechnung_en.pdf" target="_blank" rel="noreferrer noopener">PrintMulti_XRechnung_en.pdf</a></p>



<h2 class="wp-block-heading">Girocode without ZUGFeRD invoice</h2>



<p>The examples with hidden text supplied with the ZUGFeRD Composer allow easy embedding of a Girocode, as the necessary data can be extracted very easily.</p>



<p>This also works with other invoices, provided that the relevant data can be extracted. Normally, the account details are fixed, so only the purpose and the amount need to be extracted from the invoice.</p>



<p class="translation-block">In the example ‘<a href="http://www.lvbprint.de/en/files/girocode/invoice_two_vat_girocode_only.odt/" target="_blank" data-type="“link”" data-id="’www.lvbprint.de/" rel="noreferrer noopener">invoice_two_vat_girocode_only.odt</a>’, all hidden text has been removed. If you take a look at the extracted texts in the <em>‘C:\ZUGFeRD\Temp’</em> directory, you will see that the invoice number (=purpose of use) and the amount can be extracted.</p>



<pre class="wp-block-code"><code>The relevant sections are (spaces at the beginning and end are removed by the Girocode scripts)
<code>...RECHNUNG: <strong>2025-0001</strong>DATUM:...0,00€FÄLLIGER BETRAG<strong>1004,66</strong>€Zahlung...</code></code></pre>



<p class="translation-block">There is also a ‘<a href="http://www.lvbprint.de/en/files/girocode/PrintMulti_Girocode.ini/" target="_blank" data-type="“link”" data-id="’http://www.lvbprint.de/" rel="noreferrer noopener">PrintMulti_Girocode.ini</a>’ file, which is prepared accordingly. It requires a PrintMulti printer called ‘Girocode’..</p>



<p>Der wichtige Abschnitt ist hier (&#8222;purpose&#8220;, &#8222;amount&#8220; aus dem Rechnungstext; der Rest ist fix)</p>



<pre class="wp-block-code"><code><code>purpose=$(;rawpage;RECHNUNG:(&#91;^DATUM])DATUM;1;regex) 
amount=$(;rawpage;FÄLLIGER BETRAG"(&#91;^€])€;1;regex)
owner="Gustav Gansöäü"
iban="DE75 5121 0800 1245 1261 99"
bic="GENOKDKSJFG"
nf="DE-de"
currency="EUR"</code></code></pre>



<p>The account holder may also include umlauts. However, the Girocode definition does not permit the use of all Unicode characters from the character set. The PDF invoice contains a different account holder.<br></p>



<p></p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>