Генератор штрих-кода google.zxing в iReport

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

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


person masoud    schedule 02.10.2011    source источник
comment
groups.google.com/group/zxing/browse_thread/thread/   -  person Alex K    schedule 10.10.2011
comment
@AlexK: я пробовал это раньше, но не ясно   -  person masoud    schedule 10.10.2011
comment
Вы должны хотя бы сообщить нам, какой штрих-код вы пытаетесь сгенерировать...   -  person Marc Nuri    schedule 04.11.2011
comment
@MarcNuri: без разницы, но по крайней мере для 2D-штрих-кода   -  person masoud    schedule 05.11.2011
comment
@MasoudM.: Я понимаю, что первоначальный вопрос был опубликован пару месяцев назад, так что, возможно, вы продвинулись дальше... но образец, который я разместил, должен содержать все ключевые идеи, которые вам нужны. Есть ли шанс, что вы все еще собираетесь генерировать QR-коды?   -  person mdahlman    schedule 18.01.2012
comment
Я написал ответ, используя zxing для создания QR-кода в Stack Overflow: qr-code -интеграция-в-jasperreport. Если соответствует вашим требованиям, вы можете использовать его.   -  person Kamal Singh    schedule 20.11.2017


Ответы (2)


Две ключевые идеи заключаются в том, чтобы сначала написать немного кода 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. Add to iReport's classpath:
    • The compiled scriptlet .jar file
    • core.jar (от ZXing)
    • javase.jar (от ZXing)
  4. Добавьте в отчет элемент изображения с выражением $V{BarCodeImage}.

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

Сгенерированный QR-код

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

person mdahlman    schedule 26.12.2011
comment
Кроме того, в главе 15 есть очень хорошее руководство по созданию скриптлета opus-college.net/devcorner/iReport-Ultimate-Guide-3.pdf - person Jacek Gzel; 24.04.2017

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

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

        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, который вы можете использовать в поле Image Expression:

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