google.zxing генератор штрих-кода в iReport - PullRequest
14 голосов
/ 02 октября 2011

Я хочу разместить штрих-код на своей странице и могу просмотреть его.Генератор штрих-кода google.zxing и мой инструмент отчетности - iReport .

Но я не знаю, как настроить Image Expression и Expression Class изображенияв iReport .

Ответы [ 2 ]

8 голосов
/ 26 декабря 2011

Две ключевые идеи - сначала написать немного кода Java для создания соответствующего изображения, а затем разработать отчет для соответствующей ссылки на этот код. Возможно, самый простой способ создать изображение - это скриптлет:

package com.jaspersoft.alliances.mdahlman;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;

public class QRCodeScriptlet extends JRDefaultScriptlet {
    public void afterDetailEval() throws JRScriptletException {
        QRCodeWriter writer = new QRCodeWriter();
        BitMatrix matrix = null;
        try {
            matrix = writer.encode(getFieldValue("barcode_text").toString(), BarcodeFormat.QR_CODE, 256, 256);
            this.setVariableValue("BarCodeImage", MatrixToImageWriter.toBufferedImage(matrix) );
        } catch (WriterException e) {
            e.printStackTrace();
        }
    }
}

Это полно жестко закодированного безобразия, но все ключевые идеи показаны. Затем вам нужно определить отчет следующим образом:

  1. Пример запроса: select 'some text' as barcode_text Я включил это только для того, чтобы подчеркнуть, что мой скриптлет жестко кодирует имя поля barcode_text. (Это плохо.)
  2. Переменная: BarCodeImage типа java.awt.image.BufferedImage с вычислением System. Это имя также жестко запрограммировано в скриптлете. (Это одинаково плохо.)
  3. Добавить в путь к классам iReport:
    • Скомпилированный скриптлет .jar файл
    • core.jar (от ZXing)
    • javase.jar (из ZXing)
  4. Добавить элемент изображения в отчет с выражением $V{BarCodeImage}.

Результат - счастливый счастливый QR-код в созданном вами JasperReport:

Generated QR-Code

Я помню пример, который я видел, который делает вещи намного чище. На самом деле он включает в себя хороший плагин, так что вы можете легко установить эту функцию в iReport с минимальными усилиями. Если я смогу это отследить, я обновлю этот пост. Но до тех пор это, по крайней мере, охватывает все критические точки.

2 голосов
/ 17 октября 2011

Выражение изображения должно возвращать любой подкласс java.awt.Image.Самый простой способ добиться этого - использовать свой собственный вспомогательный класс для генерации Image.Вы можете создать статический метод, который генерирует штрих-код из String и вызывать этот метод из IReport.

В случае ZXing я не знаю, какой метод использовать, но я могу сказать, что я используюв качестве ImageExpression с использованием библиотеки барбекю.

        net.sourceforge.barbecue.BarcodeImageHandler.getImage(
MyBarcodeGenerator.getFromString($F{field})

MyBarcodeGenerator класс содержит метод getFromString(...), который возвращает net.sourceforge.barbecue.Barcode, в моем случае net.sourceforge.barbecue.linear.code39.Code39Barcode

Expression Classигнорируется.

- Отредактировано:

Для кодирования изображения в zxing вы должны использовать MatrixToImageWriter

Следующий код закодирует QRCode в BufferedImage, который вы можете использоватьв поле «Выражение изображения»:

MatrixToImageWriter.toBufferedImage(new QRCodeWriter().encode("BARCODE CONTENT", BarcodeFormat.QR_CODE,     400 /*Width*/, 400/*Height*/));
...