/** * Barcode utilities * * @eloas * * @version 1.0 * @author MW, ELO Digital Office GmbH * */ sol.define("sol.common.as.BarcodeUtils", { singleton: true, /** * Generates a barcode * @param {String} type Barcode type. Supported types: QR_CODE, CODE_39, ITF * @param {String} content Content * @param {String} config Configuration * @param {Number} config.width Image width * @param {Number} config.height Image height * @param {String} config.filePath Path of the destination file * @param {Boolean} config.returnBase64 If true the function returns the barcode as Base64 encoded string * @return {Object} * * # Example * * base64String = sol.common.as.BarcodeUtils.generate("CODE_39", "12345678", { width: 200, height: 50, returnBase64: true }); * */ generate: function (type, content, config) { if (!content) { throw "Barcode content is empty."; } if (!type) { throw "Barcode type is empty."; } config = config || {}; config.width = config.width || 500; var me = this, bitMatrix; switch (String(type).toUpperCase()) { case "QR_CODE": bitMatrix = me.createQrCode(content, config); break; case "CODE_39": bitMatrix = me.createCode39(content, config); break; case "ITF": bitMatrix = me.createItfCode(content, config); break; default: throw "Barcode type '" + type + "' is not supported."; } return me.createOutput(bitMatrix, config); }, /** * @private * Creates a QR code * @param {String} content Content * @param {Object} config Configuration * @return {com.google.zxing.common.BitMatrix} */ createQrCode: function (content, config) { var hintMap = new java.util.Hashtable(), qrCodeWriter = new com.google.zxing.qrcode.QRCodeWriter(); config.height = config.height || config.width; hintMap.put(com.google.zxing.EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.L); return qrCodeWriter.encode(content, com.google.zxing.BarcodeFormat.QR_CODE, config.width, config.height, hintMap); }, /** * @private * Creates a Code 39 barcode * @param {String} content Content * @param {Object} config Configuration * @return {com.google.zxing.common.BitMatrix} */ createCode39: function (content, config) { var hintMap = new java.util.Hashtable(), code39Writer = new com.google.zxing.oned.Code39Writer(); config.height = config.height || (config.width / 3); content = String(content).toUpperCase(); return code39Writer.encode(content, com.google.zxing.BarcodeFormat.CODE_39, config.width, config.height, hintMap); }, /** * @private * Creates a Code ITF barcode (Interleaved 5 of 2) * @param {String} content Content * @param {Object} config Configuration * @return {com.google.zxing.common.BitMatrix} */ createItfCode: function (content, config) { var hintMap = new java.util.Hashtable(), itfWriter = new com.google.zxing.oned.ITFWriter(); config.height = config.height || (config.width / 3); return itfWriter.encode(content, com.google.zxing.BarcodeFormat.ITF, config.width, config.height, hintMap); }, /** * @private * Produces the barcode output * @param {com.google.zxing.common.BitMatrix} bitMatrix * @param {Object} config Configuration * @return {String} */ createOutput: function (bitMatrix, config) { var me = this, result, byteArrayOutputStream, file; config = config || {}; if (config.filePath) { file = new File(config.filePath); config.fileType = config.fileType || sol.common.FileUtils.getExtension(file); Packages.com.google.zxing.client.j2se.MatrixToImageWriter.writeToPath(bitMatrix, config.fileType, file.toPath()); if (config.show) { sol.common.ExecUtils.open(config.filePath); } } if (config.returnBase64) { byteArrayOutputStream = new java.io.ByteArrayOutputStream(); Packages.com.google.zxing.client.j2se.MatrixToImageWriter.writeToStream(bitMatrix, "png", byteArrayOutputStream); result = me.convertByteArrayToBase64(byteArrayOutputStream.toByteArray()); byteArrayOutputStream.close(); } return result; }, /** * @private * Converts a byte array to a Base64 encoded string * @param {java.lang.Byte[]} byteArray * @return {String} Base 64 encoded string */ convertByteArrayToBase64: function (byteArray) { return String(new java.lang.String(org.apache.commons.codec.binary.Base64.encodeBase64(byteArray), "UTF-8")); } });