{"id":536,"date":"2024-12-12T09:58:27","date_gmt":"2024-12-12T08:58:27","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=536"},"modified":"2025-01-03T10:05:09","modified_gmt":"2025-01-03T09:05:09","slug":"2d-barcodes-in-java-erstellen-mit-der-zxing-library","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=536","title":{"rendered":"2D-Barcodes in Java erstellen mit der zxing-Library"},"content":{"rendered":"\n<p>Barcodes sind ein integraler Bestandteil moderner Datenerfassung und -verarbeitung. W\u00e4hrend eindimensionale (1D) Barcodes wie der klassische EAN-13 oder Code128 bereits seit Jahrzehnten eingesetzt werden, um beispielsweise Artikelnummern im Handel abzubilden, bieten zweidimensionale (2D) Barcodes weitreichendere M\u00f6glichkeiten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Unterschiede zwischen 1D- und 2D-Barcodes<\/h3>\n\n\n\n<p>1D-Barcodes bestehen aus einer Abfolge von Linien und Zwischenr\u00e4umen mit unterschiedlicher Breite. Sie speichern Daten linear und in begrenztem Umfang \u2013 typischerweise wenige Dutzend Zeichen. Der Scan erfolgt \u00fcber einen Zeilenleser, der die Struktur der Linien auswertet. 2D-Barcodes hingegen nutzen eine Matrix aus Punkten oder Quadraten zur Datenspeicherung, wodurch sie wesentlich mehr Informationen auf gleicher Fl\u00e4che unterbringen k\u00f6nnen. Bekannte Formate sind QR-Codes, DataMatrix und Aztec-Codes. Sie k\u00f6nnen neben alphanumerischen Zeichen auch Bin\u00e4rdaten wie URLs, Bilder oder verschl\u00fcsselte Nachrichten speichern. Der Scan erfolgt in der Regel \u00fcber Kamerasysteme, die die komplette Matrix erfassen und interpretieren.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Vorteile von 2D-Barcodes<\/h4>\n\n\n\n<p>H\u00f6here Speicherkapazit\u00e4t ist ein wesentliches Merkmal von 2D-Barcodes, da tausende von Zeichen m\u00f6glich sind. Fehlerkorrektur ist ein weiterer Vorteil, da der Code selbst bei Besch\u00e4digungen oft lesbar bleibt. Au\u00dferdem k\u00f6nnen verschiedene Datentypen flexibel kodiert werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungsszenarien<\/h3>\n\n\n\n<p>2D-Barcodes finden sich in einer Vielzahl von Anwendungsf\u00e4llen. Im Bereich Mobile Payment werden QR-Codes h\u00e4ufig zur Zahlungsabwicklung genutzt. In der Logistik enthalten DataMatrix-Codes detaillierte Produktinformationen. Im Marketing verbinden QR-Codes physische Medien mit digitalen Inhalten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die zxing-Library<\/h2>\n\n\n\n<p>Die zxing (&#8222;Zebra Crossing&#8220;)-Library ist eine popul\u00e4re Open-Source-Bibliothek zur Erstellung und Auswertung von Barcodes. Urspr\u00fcnglich f\u00fcr Java entwickelt, bietet sie Bindings f\u00fcr viele andere Programmiersprachen und Frameworks.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vorteile der zxing-Library<\/h3>\n\n\n\n<p>Die Library unterst\u00fctzt mehrere Barcode-Typen und kann sowohl 1D- als auch 2D-Barcodes erstellen und lesen. Der Einstieg ist einfach, da mit wenigen Zeilen Code Barcodes generiert oder gescannt werden k\u00f6nnen. Zxing bietet Flexibilit\u00e4t und ist sowohl in Desktop-, Web- als auch mobilen Anwendungen einsetzbar. Als Open-Source-Library ist sie kostenfrei und anpassbar an individuelle Anforderungen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung von 2D-Barcodes mit zxing<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Einbindung der Bibliothek<\/h3>\n\n\n\n<p>Zun\u00e4chst muss die zxing-Library in das Projekt integriert werden. In Java erfolgt dies \u00fcblicherweise durch das Hinzuf\u00fcgen der entsprechenden Abh\u00e4ngigkeit in der <code>pom.xml<\/code> (Maven) oder <code>build.gradle<\/code> (Gradle):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>com.google.zxing<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>core<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>3.5.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>com.google.zxing<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>javase<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>3.5.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Code zur Erstellung eines QR-Codes<\/h3>\n\n\n\n<p>Hier ein Beispiel zur Generierung eines QR-Codes in Java:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.google.zxing.BarcodeFormat;\n<span class=\"hljs-keyword\">import<\/span> com.google.zxing.WriterException;\n<span class=\"hljs-keyword\">import<\/span> com.google.zxing.client.j2se.MatrixToImageWriter;\n<span class=\"hljs-keyword\">import<\/span> com.google.zxing.common.BitMatrix;\n<span class=\"hljs-keyword\">import<\/span> com.google.zxing.qrcode.QRCodeWriter;\n\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n<span class=\"hljs-keyword\">import<\/span> java.nio.file.FileSystems;\n<span class=\"hljs-keyword\">import<\/span> java.nio.file.Path;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">QRCodeGenerator<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> data = <span class=\"hljs-string\">\"https:\/\/www.example.com\"<\/span>; <span class=\"hljs-comment\">\/\/ Die zu kodierenden Daten<\/span>\n        <span class=\"hljs-built_in\">String<\/span> filePath = <span class=\"hljs-string\">\"qrcode.png\"<\/span>;         <span class=\"hljs-comment\">\/\/ Speicherort der Bilddatei<\/span>\n        int size = <span class=\"hljs-number\">300<\/span>;                         <span class=\"hljs-comment\">\/\/ Breite und H\u00f6he des QR-Codes<\/span>\n\n        <span class=\"hljs-keyword\">try<\/span> {\n            QRCodeWriter qrCodeWriter = <span class=\"hljs-keyword\">new<\/span> QRCodeWriter();\n            BitMatrix bitMatrix = qrCodeWriter.encode(data, BarcodeFormat.QR_CODE, size, size);\n\n            Path path = FileSystems.getDefault().getPath(filePath);\n            MatrixToImageWriter.writeToPath(bitMatrix, <span class=\"hljs-string\">\"PNG\"<\/span>, path);\n\n            System.out.println(<span class=\"hljs-string\">\"QR-Code erfolgreich erstellt: \"<\/span> + filePath);\n        } <span class=\"hljs-keyword\">catch<\/span> (WriterException | IOException e) {\n            e.printStackTrace();\n        }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dieser Code erzeugt einen QR-Code, der eine URL enth\u00e4lt und speichert ihn als PNG-Bild.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Anpassungen und Erweiterungen<\/h3>\n\n\n\n<p>Die zxing-Library bietet zahlreiche Optionen, um Barcodes an spezifische Anforderungen anzupassen. Farbanpassungen k\u00f6nnen vorgenommen werden, um das Farbschema des Codes zu modifizieren. QR-Codes bieten verschiedene Level der Fehlerkorrektur (L, M, Q, H), die je nach Anwendungsfall angepasst werden k\u00f6nnen.<\/p>\n\n\n\n<p>Beispiel f\u00fcr die Anpassung der Fehlerkorrektur:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.google.zxing.EncodeHintType;\n<span class=\"hljs-keyword\">import<\/span> com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;\n\n<span class=\"hljs-keyword\">import<\/span> java.util.HashMap;\n<span class=\"hljs-keyword\">import<\/span> java.util.Map;\n\n<span class=\"hljs-built_in\">Map<\/span>&lt;EncodeHintType, <span class=\"hljs-built_in\">Object<\/span>&gt; hints = <span class=\"hljs-keyword\">new<\/span> HashMap&lt;&gt;();\nhints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);\nBitMatrix bitMatrix = qrCodeWriter.encode(data, BarcodeFormat.QR_CODE, size, size, hints);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>2D-Barcodes sind leistungsf\u00e4hige Werkzeuge zur Datenspeicherung und -verteilung. Mit der zxing-Library k\u00f6nnen Entwickler einfach und effizient QR-Codes sowie andere Barcodetypen generieren und verarbeiten. Die breite Unterst\u00fctzung verschiedener Plattformen und die Flexibilit\u00e4t machen zxing zu einer idealen Wahl f\u00fcr zahlreiche Anwendungen. Ob zur Zahlungsabwicklung, in der Logistik oder im Marketing \u2013 die Einsatzm\u00f6glichkeiten sind nahezu unbegrenzt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Barcodes sind ein integraler Bestandteil moderner Datenerfassung und -verarbeitung. W\u00e4hrend eindimensionale (1D) Barcodes wie der klassische EAN-13 oder Code128 bereits seit Jahrzehnten eingesetzt werden, um beispielsweise Artikelnummern im Handel abzubilden, bieten zweidimensionale (2D) Barcodes weitreichendere M\u00f6glichkeiten. Unterschiede zwischen 1D- und 2D-Barcodes 1D-Barcodes bestehen aus einer Abfolge von Linien und Zwischenr\u00e4umen mit unterschiedlicher Breite. Sie speichern [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-536","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/536","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=536"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/536\/revisions"}],"predecessor-version":[{"id":537,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/536\/revisions\/537"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}