The Grails QR Code plugin
Groovy
Latest commit 3db9454 Dec 30, 2015 @goeh Cleanup
Permalink
Failed to load latest commit information.
LICENSES Updated Release Notes and Authors Jun 10, 2014
gradle/wrapper grails version migration step1: adding gradle build and moving config… Nov 10, 2015
grails-app Version 0.9 fixes #18 Dec 30, 2015
src
.gitignore Merge https://github.com/burtbeckwith/grails-qrcode Nov 10, 2015
LICENSE.txt
README.md Cleanup Dec 30, 2015
build.gradle Version 0.9 fixes #18 Dec 30, 2015
gradle.properties grails version migration step1: adding gradle build and moving config… Nov 10, 2015
gradlew
gradlew.bat grails version migration step1: adding gradle build and moving config… Nov 10, 2015
settings.gradle grails version migration step1: adding gradle build and moving config… Nov 10, 2015

README.md

This plugin allows you to create QR codes as part of your Grails application without the need for an external service.

Installation

For Grails 2 use version 0.7, for Grails 3 use version 0.8+.

Grails 2

Add a dependency in BuildConfig.groovy:

grails.project.dependency.resolution = {
  // ...
  plugins {
    compile ':qrcode:0.7'
    // ...
  }
}

Grails 3

Add a dependency in build.gradle

compile 'org.grails.plugins:qrcode:0.9'

Usage

QrcodeController

Render text QRCode at default size (300x300px)

.../qrcode/text/Hello+World

Render text QRCode in 30x30px

.../qrcode/text?w=30&text=test

QRCode

Render url QRCode

.../qrcode/url?u=http://grails.org/plugin/qrcode

Configuration

The maximum value of the width parameter can be configured with qrcode.size.max (default 1024).

qrcode.size.max = 2048

QrCodeService

qrCodeService.renderPng("test", 30, outputStream)

Tag Library

Namespace: qrcode

Render text as QRCode

<qrcode:image height="100" width="100" text="TEST TEXT"/>

If you want to include a QRCode image in an email and you use a GSP to render email content you must set attribute absolute="true". Otherwise the image url will not start with http:// and will probably not render correct.

<qrcode:image height="100" width="100" text="#648357" alt="Invoice #648357" absolute="true"/>

Render current request url as QRCode

<qrcode:url width="64"/>

Render vCard contact information as QRCode

In this example we have a method on the Person domain class that returns contact information as a vCard formatted String.

class Person {
    ...
    transient String getVcard() {
        def s = new StringBuilder()
        s << "BEGIN:VCARD\n"
        s << "VERSION:3.0\n"
        s << "N:${lastName};${firstName};;;\n"
        s << "FN: ${fullName}\n"
        s << "ORG:${companyName}\n"
        s << "TITLE:${title ? title.replace(',', '\\,') : ''}\n"
        s << "TEL;TYPE=work,voice,pref:${phone}\n"
        s << "TEL;TYPE=cell,voice:${cellphone}\n"
        s << "EMAIL;type=internet,pref:${email}\n"
        s << "ADR;TYPE=work,postal,pref:;;${address};${city};${state};${postalCode};${country}\n"
        def timestampFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
        s << "REV:${timestampFormat.format(lastUpdated ?: dateCreated)}\n"
        s << "END:VCARD\n"
        return s.toString()
    }
}

Now it's easy to render a QRCode of the contact information. This QRCode can be scanned with a smartphone and imported as a contact.

<qrcode:image height="150" text="${person.vcard}" alt="${person.fullName} ${person.address} ${person.city}"/>

Changes

Version 0.9: Prevent DoS attempts using large size/width values.

Version 0.8: Grails 3 support.

Version 0.7: Upgraded zxing dependency to 3.2.0.

Version 0.6: Upgraded pngj dependency to 2.1.0.