1

経験のある方に、Java コードから BIRT レポートを開始するようお願いしたいと思います。BIRT テンプレートの要素のデータソースは動的です。そのため、Java 経由で BIRT レポートにデータソース (CSV または XML ファイル) を伝える必要があります。誰かがウェブ上で良い例を知っているかもしれません。

4

4 に答える 4

2

BIRT を Java アプリケーションに統合する方法については、Report Engine APIを読むことから始めてください。

BIRT は、レポート テンプレートを作成するための API も提供します。デザイン エンジン APIを参照

于 2013-10-22T15:13:01.443 に答える
1

回答が受け入れられ、API があることに同意したとしても、これを行う必要があるときに、これを機能させるために貴重な時間を無駄にしなければならなかったため、ここにコード (部分) があります。コンソールでいくつかのパラメーターを取り、HTML、PDF、またはその両方のレポートを生成できる Java Runnable jar を作成するために実装します。

/**
 * 0x01 is PDF,
 * 0x02 is HTML
 */
static int supportedExportTypesFlag = 0x03;

public static void main(final String[] args) {

    int result = -1;

    IReportEngine engine = null;
    EngineConfig config = null;
    IReportRunnable design = null;

    Object[] validationResults = ValidateArguments(args);
    if (((Boolean)validationResults[0]).equals(Boolean.TRUE)) {
        try {
            config = new EngineConfig();
            config.setLogConfig("./", Level.FINE);

            Platform.startup(config);
            IReportEngineFactory factory = (IReportEngineFactory) Platform
                    .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
            engine = factory.createReportEngine(config);
            engine.changeLogLevel(Level.WARNING);

            design = engine.openReportDesign((String)validationResults[1]);

            IRunAndRenderTask task = engine.createRunAndRenderTask(design);

            byte[] paramStr = Files.readAllBytes(Paths.get((String)validationResults[3]));
            InputStream iS = new ByteArrayInputStream(paramStr);
            iS.mark(paramStr.length);

            HashMap<String, Object> contextMap = new HashMap<String, Object>();
            contextMap.put("org.eclipse.birt.report.data.oda.xml.inputStream", iS);
            contextMap.put("org.eclipse.birt.report.data.oda.xml.closeInputStream", Boolean.FALSE);
            task.setAppContext(contextMap);

            int exportTypes = ((Integer)validationResults[2]).intValue();

            if((exportTypes & 0x02) == 0x02)
            {
                final HTMLRenderOption HTML_OPTIONS = new HTMLRenderOption();
                HTML_OPTIONS.setOutputFileName((String)validationResults[4] + ".html");
                HTML_OPTIONS.setOutputFormat("html");

                task.setRenderOption(HTML_OPTIONS);
                task.run();
                task.close();
            }

            iS.reset();

            if((exportTypes & 0x01) == 0x01)
            {
                 final PDFRenderOption PDF_OPTIONS = new PDFRenderOption();
                 PDF_OPTIONS.setOutputFileName((String)validationResults[4] + ".pdf");
                 PDF_OPTIONS.setOutputFormat("pdf");

                 task = engine.createRunAndRenderTask(design);
                 task.setAppContext(contextMap);
                 task.setRenderOption(PDF_OPTIONS);
                 task.run();
                 task.close();
            }

            iS.close();

        } catch (IOException e) {
            result = 1;
            e.printStackTrace();
        } catch (EngineException e) {
            result = 2;
            e.printStackTrace();
        } catch (BirtException e) {
            result = 3;
            e.printStackTrace();
        }

        // Shutdown
        engine.destroy();
        Platform.shutdown();
        // Bugzilla 351052
        RegistryProviderFactory.releaseDefault();
        result = 0;
    }

    System.exit(result);
}

ここでの ValidateArguments はそれほど重要ではないと思います。それが何をし、何を返すかを推測できます。

これが誰かを助けることを願っています!

于 2015-01-29T16:01:41.057 に答える