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")
- Maven Central – Abhängigkeit zu anderen Build-Tools hinzufügen
- GitHub – Quellcode, Javadoc und vorkompiliertes JAR herunterladen
- OpenPDF – Optionale Abhängigkeit für PDF-Export (v1.3.0 oder höher)
- Javadoc online – Vollständige API-Dokumentation und Referenz
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.*;
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);
- Bei 1D Barcodes, die aus vertikalen Strichen bestehen, ist dabei stets nur eine der beiden Auflösungen
wichtig. Beispielsweise ist bei der Erstellung eines 1D Barcodes unter einem Winkel von 0° oder 180° die horizontale
Auflösung entscheidend, da die Strichbreiten an diese angepasst werden müssen. Bei einem Winkel von 90° oder 270°
ist entsprechend die vertikale Auflösung zu berücksichtigen.
- Bei 2D Codes sollte, wenn der Drucker eine unterschiedliche horizontale und vertikale Auflösung hat,
unabhängig vom gewählten Winkel immer die kleinere der beiden Auflösungen verwendet werden. Zum Beispiel sollte bei
einer Auflösung von 300×600 DPI die niedrigere Auflösung von 300 DPI verwendet werden.
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.