Tipps & Tricks - QR-Codes erzeugen
QR-Codes sind kleine Bilder und repräsentieren meist eine URL. Durch das Abfotografieren des QR-Codes oder
mit speziellen Apps kann zur URL navigiert werden. Die ZXing-Java-Bibliothek bietet die Möglichkeit,
solche QR-Codes selbst zu erzeugen. Wie man diese Bibliothek einbindet und mit Groovy nutzt, um Eingaben in einen QR-Code
umzuwandeln, zeigt dieser Beitrag. Die Beispielapplikation können Sie
hier
herunterladen. Anschließend können Sie sie wie gewohnt
importieren.
Aktivieren Sie die
Experten-Optionen,
damit alle Dialoge, die in diesem Beispiel genannt werden, erreichbar sind.
Kenntnisse in Groovy-Skript sind bei diesem Beitrag von Vorteil.
Bibliothek einbinden
Zunächst muss die Bibliothek unter
https://repo1.maven.org/maven2/com/google/zxing/core/3.1.0/core-3.1.0.jar
heruntergeladen und Intrexx zur Verfügung gestellt werden. Da der Dateiname nicht sehr aussagekräftig ist,
wird die Datei in "zxing-3.1.0.jar" umbenannt. Prinzipiell können Java-Bibliotheken entweder für ein
einzelnes oder alle Portale zur Verfügung gestellt werden. Um die Bibliothek in allen Portalen nutzen zu können,
kopiert Sie diese in das
Installationsverzeichnis lib/extensions.
Jetzt muss dem Portal noch mitgeteilt werden, wo es nach dieser Bibliothek suchen soll. Dazu wird die Datei "portal.wcf",
die Sie im
Portalverzeichnis internal/cfg finden, bearbeitet.
Fügen Sie im folgenden Abschnitt die unterste Zeile hinzu:
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=<Intrexx-Installationsverzeichnis>\lib\update
wrapper.java.classpath.2=<Intrexx-Installationsverzeichnis>\lib\*.jar
wrapper.java.classpath.3=<Intrexx-Installationsverzeichnis>\lib\remote\*.jar
wrapper.java.classpath.4=<Intrexx-Installationsverzeichnis>\derby\lib\*.jar
wrapper.java.classpath.5=<Intrexx-Installationsverzeichnis>\lib\extensions\*.jar
Wichtig hierbei ist das Hochzählen des Wertes in wrapper.java.classpath.* als fortlaufende Nummer.
Starten Sie dann den
Portaldienst neu.
Applikation
Hier sehen Sie die Eingabeseite der Beispielapplikation, auf der die URL eingegeben und gespeichert werden kann.
In der
Datengruppe gibt es das
Datei-Datenfeld "Bild".
Auf der Seite "Übersicht" finden Sie eine
Ansichtstabelle,
die die Daten aus der Datengruppe anzeigt. Wenn Sie die Spalte "Bild"
bearbeiten,
sehen Sie, dass hier die zweite Vorlage von links ausgewählt ist. Mit dieser Auswahl wird der erstellte
QR-Code später in der Tabelle angezeigt.
Prozess
Im zugehörigen Prozess gibt es einen
Datengruppen-Ereignisbehandler,
der auf das Einfügen von Datensätzen in die Datengruppe der Beispielapplikation reagiert.
Mit dem Ereignisbehandler ist eine Groovy-Aktion mit dem folgenden Groovy-Skript verbunden:
import de.uplanet.lucy.server.businesslogic.util.FileUCHelper
import java.awt.Color
import java.awt.Graphics2D
import java.awt.image.BufferedImage
import java.io.File
import java.util.Hashtable
import javax.imageio.ImageIO
import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.common.BitMatrix
import com.google.zxing.qrcode.QRCodeWriter
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
//Zu konvertierende URL
String recURL = g_record["5BD2494E2A4BD0AD0C427262CE4882C61F639EF3"].value /* datafield URL <string> */
//Größe des Bildes in Pixel
int size = 125
//Fehlerkorrekturlevel setzen
Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>()
hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L)
//QR-Code Writer initialisieren
QRCodeWriter qrCodeWriter = new QRCodeWriter()
//QR-Code aus URL berechnen
BitMatrix byteMatrix = qrCodeWriter.encode(recURL,BarcodeFormat.QR_CODE, size, size, hintMap)
//Längeneinheit des Bildes an QR-Code anpassen
int CrunchifyWidth = byteMatrix.getWidth()
BufferedImage image = new BufferedImage(CrunchifyWidth, CrunchifyWidth,BufferedImage.TYPE_INT_RGB)
image.createGraphics()
Graphics2D graphics = (Graphics2D) image.getGraphics()
//Komplettes Bild weiss einfärben
graphics.setColor(Color.WHITE)
graphics.fillRect(0, 0, CrunchifyWidth, CrunchifyWidth)
//Farbe auf Schwarz wechseln
graphics.setColor(Color.BLACK)
//Schwarze Punkte auslesen und auf Bild setzen
for (int i = 0; i < CrunchifyWidth; i++)
{
for (int j = 0; j < CrunchifyWidth; j++)
{
if (byteMatrix.get(i, j)) {
graphics.fillRect(i, j, 1, 1)
}
}
}
// Image in Bild-Datei umwandeln
String fileType = "png"
String filePath = "internal/tmp/qrcode-${g_record.getRecId()}.png"
File qrFile = new File(filePath)
ImageIO.write(image, fileType, qrFile)
//Bild in Datengruppe verschieben
FileUCHelper.moveFileToIntrexx(g_context, qrFile, "F80E0F688327BCF0D35A91E5B4930E731861CCA4", g_record.getRecId(), false)
Falls Sie das Skript in anderen Applikationen verwenden wollen, ersetzen Sie bitte die GUID
"5BD2494E2A4BD0AD0C427262CE4882C61F639EF3" mit der GUID Ihres URL-Datenfeldes und die GUID
"F80E0F688327BCF0D35A91E5B4930E731861CCA4" mit der GUID Ihres Bild-Datei-Datenfeldes.
Applikation im Browser
Wenn Sie die Applikation im Browser öffnen, eine URL auf der Eingabeseite eintragen und
speichern, wird automatisch ein QR-Code erzeugt und auf der Seite "Übersicht"
angezeigt. Das Bild kann von dort z.B. ganz einfach in die Zwischenablage kopiert werden.