|
Barcodes in einer APEX-Anwendung generieren
Dieser Beitrag dreht sich um das Thema Barcodes und wie man diese
in einer Oracle11g-Datenbank aus einer APEX-Anwendung heraus generieren kann.
Abbildung 1 zeigt ein
Beispiel mit verschiedenen Barcode-Typen.
In dieser Form ist der Tipp ist nur in einer Oracle11g-Datenbank
getestet und lauffähig.
Achtung: Wenn Sie auf Windows mit einer Datenbank 11.1.0.6 oder 11.1.0.7 arbeiten,
funktioniert dieser Tipp nicht. Das Problem ist bekannt (Bug-Eintrag in Metalink
"7145719") und wird in Version 11.2. Auf Linux-Plattformen funktioniert der Tipp;
das Problem tritt nicht auf.
Abbildung 1: Barcodes in Application Express
Vorbereitungen: Java-Bibliothek laden
Zum Generieren der Barcodes dient in diesem Fall die OpenSource
Java-Bibliothek
Barcode4J. Diese unterlegt der Apache Lizenz 2.0,
kann also unter deren Bedingungen frei verwendet werden. Laden Sie
also die Datei barcode4j-2.0-bin.zip von der
Download-Seite des Barcode4J-Projekts herunter
und packen Sie es in ein Verzeichnis Ihrer Wahl aus. Für diesen
Tipp wird nur die Bibliothek barcode4j-light.jar
benötigt (Abbildung 2).
Abbildung 2: Nur die Datei "barcode4j-light.jar" wird benötigt
Diese muss in die Oracle-Datenbank geladen werden. Mit dem folgenden
Kommando laden Sie den Java-Code in Ihr Parsing Schema. Ausgangspunkt ist
eine Unix-Shell bzw. die "DOS-Box".
Es kann sein, dass einige Fehlermeldungen auftreten und das
"Resolving"
für zwei Java-Klassen der Bibliothek fehlschlägt. Das kann für diesen
Tipp ignoriert werden. Die sog. USPS-Mail-Barcodes benötigen wir hier
ebensowenig wie die SVG-Unterstützung.
Vorbereitungen: PL/SQL-Wrapper einrichten
Wenn die Klassen geladen sind, muss die Funktionalität als nächstes
für die SQL- und PL/SQL-Ebene verfügbar gemacht werden. Dazu dient
das PL/SQL-Paket
BARCODE
(Download), welches Sie
ebenfalls ins Parsing Schema
Ihrer APEX-Anwendung einspielen.
Vorbereitungen: PL/SQL-Prozedur für APEX einrichten
Zum Schluß benötigen Sie noch eine PL/SQL-Prozedur, welche aus
APEX heraus aufgerufen wird, um den Barcode (das generierte Bild)
anzuzeigen. Spielen Sie den folgenden Code ebenfalls ins Parsing-Schema
Ihrer APEX-Anwendung ein und vergeben Sie das EXECUTE-Privileg an PUBLIC.
Zu Beginn der Prozedur werden einige Konstanten definiert. Wichtig ist
die Variable V_FONTPATH und der korrespondierende Aufruf
von BARCODE.SET_FONT_PATH. In der Variable muss ein Verzeichnis mit
TTF-Dateien ("TrueType Fonts") für die gängigen Fonts stehen. Auf Windows-Systemen ist das
typischerweise C:\WINDOWS\Fonts. Passen
Sie diesen Pfad ggfs. an Ihr System an.
Damit Sie diesen "Font-Pfad" in der Java-Engine der Datenbank setzen können, benötigen Sie
ein entsprechendes Java-Privileg, welches Ihnen der Datenbankadministrator
wie folgt einrichten kann.
Sie erkennen die Fontdateien normalerweise am Suffix
.ttf. Achten Sie (speziell unter Linux/UNIX)
weiterhin darauf, dass die im diesem
Verzeichnis liegenden TTF-Dateien vom Betriebssystem-User
"oracle" gelesen
werden können - die Rechte sollten typischerweise so aussehen:
Beachten Sie noch eine Besonderheit, wenn Sie mit dem PL/SQL Embedded Gateway
arbeiten. Der direkte Aufruf der Prozedur per URL muss eigens gestattet werden -
wie das geht, ist im Community Tipp
Der Webserver von Application Express: PL/SQL Embedded Gateway oder Apache
im Abschnitt Eigene PL/SQL Prozeduren direkt per URL aufrufen
beschrieben.
Barcodes in einem APEX-Bericht nutzen
Nun sind alle Vorbereitungen gemacht - die Barcodes können (bspw. in einem
Bericht) genutzt werden. Erzeugen Sie dazu einen normalen SQL-Bericht in Ihrer
Anwendung mit folgender Abfrage:
In den Spalten BARCODE1 und
BARCODE2 werden die Barcodes dargestellt. Navigieren
Sie dazu zu den Berichtsattributen und dann zunächst zu den Eigenschaften der Spalte
BARCODE1. Als HTML-Ausdruck tragen Sie dann folgendes ein:
Abbildung 3: HTML-Ausdruck für Spalte "BARCODE1" eintragen
Generieren Sie den zweiten Barcode analog dazu als "Datamatrix" mit folgendem
HTML-Ausdruck.
Das Ergebnis sollte dann wie in Abbildung 4 aussehen.
Abbildung 4: Das Ergebnis: Bericht mit Barcodes
Sie können in der Prozedur GET_BARCODE erkennen, welche Barcodes Ihnen zur Verfügung
stehen:
- CODE39
- CODE128
- DATAMATRIX
- PDF417
- EAN8
- EAN13
- UPC-A
Achten Sie bei den letzten drei Typen ( EAN8, EAN13 und
UPC-A) darauf,
dass die Java-Bibliothek die Prüfziffern der übergebenen Texte kontrolliert
und im Fehlerfall Exceptions auslöst. Es kann also hilfreich sein, die Prozedur
GET_BARCODE um ein Exception Handling zu erweitern.
So wird ein EAN13-Barcode
nur dann korrekt generiert, wenn entweder eine 12-Stellige (ggfs. mit
der LDAD-Funktion auffüllen) oder eine 13-Stellige
Zahl mit korrekter Prüfsumme übergeben wird.
Andernfalls wird eine Exception
ausgelöst, die sich dann im Apache Error Logfile oder im Tracefile des Embedded
Gateway wiederfindet.
Wenn Sie sich mit Java auskennen und die Bibliothek Barcode4J näher ansehen,
so bieten sich Ihnen noch zahlreiche Möglichkeiten, die Barcodes zu konfigurieren.
Dieser Tipp fokussiert sich lediglich darauf, das Generieren von Barcodes überhaupt
zu ermöglichen. Kombiniert man dies mit dem Community-Tipp
PDF-Ausgabe mit dynamischen Bildern, so lassen sich die
Barcodes mit Hilfe des Oracle BI Publisher auch als PDF- oder andere Formate
ausgeben.
Zurück zur Community-Seite
|