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
Das Beispiel erzeugt eine Barcode-Grafik im SVG-Vektorformat, das nur RGB-Farben unterstützt. Um auf das
CMYK-Farbmodell zu wechseln, ersetzen Sie in Schritt 5 writeSVG durch writeEPS bzw. writePDF und
fügen Sie ImageCreator.COLORSPACE_CMYK als zweiten Parameter hinzu. Verwenden Sie außerdem in Schritt 3 für
CompoundColor einen der für CMYK-Farben vorgesehenen Konstruktoren.
// SCHRITT 1: 'Barcode'-Instanz erzeugen und konfigurieren
Barcode barcode = Barcode.newInstance(BarcodeType.CODE128);
try {
barcode.setContent("Abc-12345", false, false);
} catch (BarcodeException ex) {
// Ungültigen Barcode-Inhalt 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-On, 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: 'ImageCreator'-Instanz erzeugen und konfigurieren
ImageCreator imageCreator = new ImageCreator(widthMM, heightMM);
imageCreator.setTitle("Code 128: " + barcode.getText());
imageCreator.setForeground(new CompoundColor(Color.RED));
imageCreator.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 = imageCreator.getGraphics2D();
barcode.draw(g2d, 0.0, 0.0, widthMM, heightMM);
g2d.dispose();
// ... Die 'Graphics2D'-Instanz ist speziell für das Barcode-Zeichnen
// eingerichtet; notwendige 'RenderingHints' sind vorkonfiguriert
// SCHRITT 5: Barcode-Grafik als Vektordatei speichern
try (FileOutputStream fos = new FileOutputStream("Code 128.svg")) {
imageCreator.writeSVG(fos);
} catch (IOException ex) {
// Fehler beim Dateischreiben behandeln
}
Beispiel: 2D Code – QR Code als Vektorgrafik mit CMYK-Farben
Für die Verwendung von RGB-Farben anstelle von CMYK lesen Sie die Einleitung zum ersten Beispiel. Beide
Farbmodelle werden von den Formaten EPS und PDF unterstützt.
// SCHRITT 1: 'TwoDCode'-Instanz erzeugen und konfigurieren
TwoDCode tdc = new TwoDCode();
tdc.setType(TwoDType.QRCODE);
tdc.setQuietZoneSize(TwoDCode.ALL_QUIET_ZONES.get(TwoDType.QRCODE));
tdc.setContent("Ich bin ein QR Code");
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(TwoDCode.QRCODE_VERSION_AUTO);
tdc.setQRCodeErrCorr(1);
// Legt die niedrigste Fehlerkorrekturstufe (L) fest und weist
// die Bibliothek an, automatisch die kleinste QR Code-Version
// (= Größe des Code-Symbols) zu wählen, die den Inhalt kodieren kann
// SCHRITT 3: Prüfen, ob der Inhalt mit dem gewählten Zeichensatz
// kodiert werden kann; danach eine 'TwoDSymbol'-Instanz abrufen,
// die später auf einem 'Graphics2D' gezeichnet werden soll
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: 'ImageCreator'-Instanz erzeugen und konfigurieren
ImageCreator imageCreator = new ImageCreator(widthMM, heightMM);
imageCreator.setTitle("Beispiel QR Code");
imageCreator.setForeground(new CompoundColor(70, 60, 0, 40));
imageCreator.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 = imageCreator.getGraphics2D();
symbol.draw(g2d, 0.0, 0.0, widthMM, heightMM);
g2d.dispose();
// Hinweis: Die zurückgegebene 'Graphics2D'-Instanz ist speziell für das
// Barcode-Zeichnen eingerichtet, mit vorkonfigurierten 'RenderingHints'
// SCHRITT 7: Barcode-Grafik als Vektordatei speichern
try (FileOutputStream fos = new FileOutputStream("QR Code.eps")) {
imageCreator.writeEPS(fos, ImageCreator.COLORSPACE_CMYK);
} catch (IOException ex) {
// Fehler beim Dateischreiben behandeln
}
Drucken oder Exportieren von 1D- und 2D-Barcodes 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 Auflösung eines Etikettendruckers
int resolutionDPI = 300;
// Punktgröße in Millimetern berechnen
double dotSizeMM = 25.4 / resolutionDPI;
// Die 'draw'- und 'write'-Methodenaufrufe anpassen
barcode.draw(g2d, 0.0, 0.0, widthMM, heightMM, dotSizeMM, 0.0, 0.0);
// ...
imageCreator.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 als Basis verwendet werden.
Erstellen von GS1-Barcodes – GS1-128, GS1 DataMatrix, GS1 QR Code
Vor der Erstellung von GS1-Barcodes sollten Sie sich mit dem Konzept der GS1-Datenbezeichner ("Application
Identifier") vertraut machen. Eine detaillierte Beschreibung finden Sie in den Tutorials auf dieser Website:
GS1-128 und
GS1 DataMatrix.
Je nach Typ des Barcodes, den Sie erstellen möchten, verwenden Sie der Einfachheit halber eines der obigen
vollständigen 1D- oder 2D-Beispiele und fügen Sie die folgenden Codeabschnitte passend in den jeweiligen Java-Code
ein.
Für alle drei Code-Typen wird der zu kodierende Inhalt nach demselben Schema zusammengefügt:
// Für GS1-128 verwenden Sie ImplEAN128.FNC1 als FNC1-Zeichen;
// für GS1 DataMatrix und GS1 QR Code verwenden Sie (char)29
final char fnc1 = ImplEAN128.FNC1;
// Eine GTIN und ein Mindesthaltbarkeitsdatum als Beispieldaten
final String gtinAI = "01", gtinValue = "01234567890128";
final String bestBeforeDateAI = "15", bestBeforeDateValue = "271231";
// Fügen Sie den Inhalt zusammen, indem Sie auf jedes AI+Wert-Paar
// dasselbe Muster anwenden; unnötige FNC1-Zeichen, einschließlich
// des letzten, werden von der Bibliothek automatisch entfert
String content =
'(' + gtinAI + ')' + gtinValue + fnc1 +
'(' + bestBeforeDateAI + ')' + bestBeforeDateValue + fnc1;
// Hinweis: die Bibliothek akzeptiert den Inhalt auch ohne Klammern;
// diese werden hier zur einfacheren Fehlersuche eingefügt
Für GS1-128 geht es weiter mit:
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 geht es weiter mit:
// Erstellen Sie eine 'TwoDCode'-Instanz und setzen Sie als Typ:
// TwoDType.GS1_DATAMATRIX bzw. TwoDType.GS1_QRCODE
String validated = null;
try {
validated = new GS1Validator(content, (char)29).getContent();
} catch (BarcodeException ex) {
// Validierungsfehler behandeln
}
if (validated != null)
// ... setzen von 'validated' via 'setContent'-Methode
Bei ungültigem Inhalt liefert BarcodeException eine detaillierte Fehlermeldung. Diese Meldungen sind in zwei
Sprachen verfügbar – Englisch und Deutsch. Die englische Fehlerbeschreibung kann stets mit getMessage()
abgerufen werden, während getLocalizedMessage() die Meldung gemäß der Java-Systemsprache
(Locale.getDefault()) zurückgibt.