Barcode & Etiketten Software

Barcode-Lib4J – Java: QR Code, GS1-128 +mehr generieren

Barcode-Lib4J

BARCODE-Lib4J – Open-Source-Bibliothek für Java zum Zeichnen, Drucken und Speichern von 1D- und 2D-Barcodes in Vektor- (PDF, EPS, SVG) und Rastergrafiken (PNG, BMP, JPG). Praxisbewährt in unseren etablierten Software-Produkten.

Features

  • Verwendung von Java 2D (Graphics2D) ermöglicht Ausgabe auf Bildschirm, Drucker oder Datei
  • Export nach PDF: Konformität zu PDF/X-1a:2001 (CMYK) für farbtreuen Druck, Unterstützung von RGB-Farben
  • Export nach EPS: Unterstützung von CMYK- und RGB-Farben; optionale Einbettung einer TIFF-Vorschau für Grafikprogramme ohne EPS-Interpreter
  • Export nach SVG: Unterstützung von RGB-Farben
  • Export nach PNG, BMP, JPG: DPI-Auflösung wird im Datei-Header gespeichert, Original-Abmessungen bleiben erhalten; Kein Aliasing oder andere unerwünschte Artefakte
  • Hohe Präzision: Koordinaten werden in allen Vektorformaten mit 6 Nachkommastellen gespeichert
  • Anpassung der Barcode-Elemente an Zielauflösung – gewährleistet optimale Qualität bei Druckern ≤ 600 dpi und Rasterbildern
  • Balkenbreitenkorrektur zur Kompensation von Farbausbreitung bei Tintenstrahldruckern
  • Anpassbare Klartextzeile, einschließlich Schriftart, Abstand und Positionierung oben/unten oder vollständiges Ausblenden
  • Unterstützung für transparenten Hintergrund in EPS, PDF, SVG und PNG
  • Konfigurierbares Balkenverhältnis von 2,0:1 bis 3,0:1 für Interleaved 2 of 5 (ITF), Code 39 und andere Barcode-Typen
  • Add-Ons (2 oder 5 Ziffern) für EAN-13, EAN-8, UPC-A, UPC-E, ISBN-13 und ISMN; zweite Klartextzeile für ISBN-13 und ISMN
  • Umfassende Unterstützung von GS1-128, GS1 DataMatrix, GS1 QR Code: Validierung von Application Identifiern, Datenformaten und Prüfziffern

Installation – Maven und Gradle

<dependency>
    <groupId>de.vwsoft</groupId>
    <artifactId>barcodelib4j</artifactId>
    <version>3.0.0</version>
</dependency>

// Groovy DSL
implementation 'de.vwsoft:barcodelib4j:3.0.0'
// Kotlin DSL
implementation("de.vwsoft:barcodelib4j:3.0.0")

Erste Schritte mit Beispielen

In den folgenden Beispielen müssen verschiedene Klassen importiert werden. Damit dies nicht in jedem Beispiel einzeln nötig ist, können Sie die folgende Import-Liste verwenden, die alle erforderlichen Klassen auf einmal berücksichtigt:

import java.awt.*;
import java.io.*;

import de.vwsoft.barcodelib4j.image.*;
import de.vwsoft.barcodelib4j.oned.*;
import de.vwsoft.barcodelib4j.twod.*;
1D & 2D Barcode

Beispiel: 1D Barcode – Code 128 als Vektorgrafik mit RGB-Farben

Dieses Beispiel erstellt eine Barcode-Grafik im SVG-Format, das ausschließlich RGB-Farben unterstützt. Um zum CMYK-Farbmodell zu wechseln, verwenden Sie in Schritt 3 einen CompoundColor-Konstruktor für CMYK-Farben. Ersetzen Sie dann in Schritt 5 writeSVG durch writeEPS oder writePDF und fügen Sie ImageColorModel.CMYK als zweiten Parameter hinzu.

// SCHRITT 1: 'Barcode'-Instanz erzeugen und konfigurieren
Barcode barcode = Barcode.newInstance(BarcodeType.CODE128);
try {
    barcode.setContent("Abc-12345", false, false);
} catch (BarcodeException ex) {
    // Validierungsfehler behandeln
}
barcode.setFont(new Font("OCR-B", Font.PLAIN, 1));
barcode.setFontSizeAdjusted(true);
barcode.setTextOffset(-0.3);
// ... weitere optionale Einstellungen für Prüfziffer, Add-Ons, Ratio,
// Textposition und -sichtbarkeit sowie andere Barcode-Eigenschaften

// SCHRITT 2: Abmessungen der Grafik in Millimetern festlegen
final double widthMM = 50.0, heightMM = 30.0;

// SCHRITT 3: 'BarExporter'-Instanz erzeugen und konfigurieren
BarExporter exporter = new BarExporter(widthMM, heightMM);
exporter.setTitle("Code 128: " + barcode.getText());
exporter.setForeground(new CompoundColor(Color.RED));
exporter.setBackground(new CompoundColor(Color.YELLOW));
// ... weitere optionale Einstellungen wie Hintergrundtransparenz,
// Rotationswinkel und zusätzliche Metadaten

// SCHRITT 4: 'Graphics2D'-Instanz abrufen, dann den Barcode an
// Position [0,0] mit den festgelegten Abmessungen zeichnen
Graphics2D g2d = exporter.getGraphics2D();
barcode.draw(g2d, 0.0, 0.0, widthMM, heightMM);
g2d.dispose();
// Hinweis: Die 'Graphics2D'-Instanz ist zum Zeichnen von Barcodes
// vorkonfiguriert; alle notwendigen 'RenderingHints' sind gesetzt

// SCHRITT 5: Barcode-Grafik als Vektordatei speichern
try (FileOutputStream fos = new FileOutputStream("Code 128.svg")) {
    exporter.writeSVG(fos);
} catch (IOException ex) {
    // Fehler beim Dateischreiben behandeln
}

Beispiel: 2D Code – QR Code als Vektorgrafik mit CMYK-Farben

Dieses Beispiel erstellt eine Barcode-Grafik im EPS-Format mit CMYK-Farben. Um zu RGB-Farben zu wechseln, verwenden Sie in Schritt 5 einen CompoundColor-Konstruktor für RGB. Ersetzen Sie dann in Schritt 7 ImageColorModel.CMYK durch ImageColorModel.RGB, oder verwenden Sie stattdessen writeSVG (unterstützt ausschließlich RGB).

// SCHRITT 1: 'TwoDCode'-Instanz erzeugen und konfigurieren
TwoDCode tdc = new TwoDCode(TwoDType.QRCODE);
tdc.setContent("Hallo Welt!");
tdc.setCharset(null); // ISO-8859-1 wird verwendet, kein ECI wird erzeugt
// Alternativ kann ein anderer Zeichensatz als ISO-8859-1 (z.B. UTF-8)
// angegeben werden, was einen ECI-Block im QR Code einfügt

// SCHRITT 2: Typ-spezifische Einstellungen vornehmen (Methoden für QR Code
// beginnen mit setQRCode***, für DataMatrix mit setDataMatrix***, usw.)
tdc.setQRCodeVersion(QRCodeVersion.AUTO);
tdc.setQRCodeErrCorr(QRCodeErrorCorrection.M);
// Weist die Bibliothek an, automatisch die kleinste QR Code-Version
// (= Größe des Code-Symbols) zu wählen, die den Inhalt kodieren kann
// und legt die mittlere Fehlerkorrekturstufe ("M") fest

// SCHRITT 3: Prüfen, ob der Inhalt mit dem gewählten Zeichensatz
// kodiert werden kann; danach eine 'TwoDSymbol'-Instanz abrufen
TwoDSymbol symbol = null;
if (tdc.canEncode()) {
    try {
        symbol = tdc.buildSymbol();
    } catch (Exception ex) {
        // Die Exception behandeln
    }
}

// SCHRITT 4: Abmessungen der Grafik in Millimetern festlegen;
// da QR Codes immer quadratisch sind, wird das Symbol auf der Fläche
// zentriert (zur Demonstration unterscheiden sich Breite und Höhe)
final double widthMM = 50.0, heightMM = 30.0;

// SCHRITT 5: 'BarExporter'-Instanz erzeugen und konfigurieren
BarExporter exporter = new BarExporter(widthMM, heightMM);
exporter.setTitle("Beispiel QR Code");
exporter.setForeground(new CompoundColor(70, 60, 0, 40));
exporter.setBackground(new CompoundColor(0, 5, 40, 0));
// ... Hier können weitere optionale Einstellungen konfiguriert werden,
// wie Hintergrundtransparenz, Rotationswinkel, zusätzliche Metadaten
// und Einstellungen für die Einbettung einer optionalen TIFF-Vorschau

// SCHRITT 6: 'Graphics2D'-Instanz abrufen, dann den Code an
// Position [0,0] mit den festgelegten Abmessungen zeichnen
Graphics2D g2d = exporter.getGraphics2D();
symbol.draw(g2d, 0.0, 0.0, widthMM, heightMM);
g2d.dispose();
// Hinweis: Die 'Graphics2D'-Instanz ist zum Zeichnen von Barcodes
// vorkonfiguriert; alle notwendigen 'RenderingHints' sind gesetzt

// SCHRITT 7: Barcode-Grafik als Vektordatei speichern
try (FileOutputStream fos = new FileOutputStream("QR Code.eps")) {
    exporter.writeEPS(fos, ImageColorModel.CMYK);
} catch (IOException ex) {
    // Fehler beim Dateischreiben behandeln
}

Drucken oder Exportieren in Rasterformate

Beim Exportieren von Barcodes in Rasterformate (PNG, BMP, JPG) sowie bei der Ausgabe auf einem Drucker mit niedriger Auflösung ist es wichtig, die richtige Auflösung anzugeben, um die bestmögliche Qualität zu gewährleisten. Die write-Methode sollte den entsprechenden numerischen Parameter verwenden, während die draw-Methode die abgeleitete Punktgröße in Millimetern verwenden sollte. Letztere wird nach folgender Formel berechnet: 25,4 geteilt durch die Auflösung in DPI. Beispiel:

// Typische (niedrige) Auflösung eines Etikettendruckers
int resolutionDPI = 300;

// Punktgröße in Millimetern berechnen
double dotSizeMM = 25.4 / resolutionDPI;

// 'draw'-Methodenaufruf im obigen 1D-Beispiel anpassen
barcode.draw(g2d, 0.0, 0.0, widthMM, heightMM, dotSizeMM, 0.0, 0.0);
// 'draw'-Methodenaufruf im obigen 2D-Beispiel anpassen
symbol.draw(g2d, 0.0, 0.0, widthMM, heightMM, dotSizeMM);

// 'write'-Methodenaufruf anpassen
exporter.writePNG(fos, resolutionDPI, resolutionDPI);

GS1-Barcodes erstellen – GS1-128, GS1 DataMatrix, GS1 QR Code

Verwenden Sie je nach gewünschtem Barcode-Typ eines der obigen vollständigen 1D- oder 2D-Beispiele und fügen Sie den folgenden Code vor SCHRITT 1 ein.

// Für GS1-128 die Konstante ImplEAN128.FNC1 verwenden;
// für GS1 DataMatrix und GS1 QR Code durch (char)29 ersetzen
final char fnc1 = ImplEAN128.FNC1;

// Eine GTIN und ein Mindesthaltbarkeitsdatum als Beispieldaten
final String gtinAI = "01", gtinValue = "01234567890128";
final String bestBeforeDateAI = "15", bestBeforeDateValue = "271231";

// Content-String zusammensetzen, indem das gleiche Muster auf jedes
// AI+Wert-Paar angewendet wird; unnötige FNC1-Zeichen, einschließlich
// des letzten, werden automatisch von der Bibliothek entfernt
String content =
        '(' + gtinAI + ')' + gtinValue + fnc1 +
        '(' + bestBeforeDateAI + ')' + bestBeforeDateValue + fnc1;

Für GS1-128 in SCHRITT 1 ersetzen:

Barcode barcode = Barcode.newInstance(BarcodeType.EAN128);
try {
    barcode.setContent(content, false, false);
} catch (BarcodeException ex) {
    // Validierungsfehler behandeln
}

Für GS1 DataMatrix oder GS1 QR Code in SCHRITT 1 ersetzen:

// Für GS1 QR Code GS1_DATAMATRIX durch GS1_QRCODE ersetzen
TwoDCode tdc = new TwoDCode(TwoDType.GS1_DATAMATRIX);
try {
    GS1Validator validator = new GS1Validator(content, fnc1);
    tdc.setContent(validator.getContent());
} catch (BarcodeException ex) {
    // Validierungsfehler behandeln
}

Bei ungültigem Inhalt liefert BarcodeException eine detaillierte Fehlermeldung. Diese Meldungen sind in zwei Sprachen verfügbar: Englisch und Deutsch. Die englische Meldung kann immer mit getMessage() abgerufen werden, während getLocalizedMessage() die Meldung entsprechend der Standard-Locale-Einstellung von Java zurückgibt, wie sie von Locale.getDefault() zurückgegeben wird.