0

チャートをさまざまなファイル タイプにレンダリングできます。

 dRenderer = ce.getRenderer("dv.SVG");//or dv.PNG
 dRenderer.setProperty(IDeviceRenderer.FILE_IDENTIFIER, path);

しかし、バイナリデータをストリームとして取得する方法は? チャートはおそらく誰かのブラウザで終わります。そのため、ディスク上のファイルは比較的役に立ちません。

(多くのチャートを再度読み取る前にディスクに保存するのはばかげていますよね?)

簡単に答えてください:

パス文字列の代わりに出力ストリームを「FILE_IDENTIFIER」として指定することができます (「dv.SVG」と「dv.PNG」の両方で動作します)。

4

3 に答える 3

1

SVGを使用している場合は、ファイル識別子を出力ストリームに設定し、コンテンツタイプ(response.setContentType( "image / svg + xml");を必ず設定してください。

    try
    {   
        RunTimeContext rtc = new RunTimeContext( );
        rtc.setULocale( ULocale.getDefault( ) );

        Generator gr = Generator.instance( );
        GeneratedChartState gcs = null;
        Bounds bo = BoundsImpl.create( 0, 0, 600, 400 );
        gcs = gr.build( idr.getDisplayServer( ), chart, bo, null, rtc, null );

        idr.setProperty( IDeviceRenderer.FILE_IDENTIFIER, out ); 
        idr.setProperty(
                IDeviceRenderer.UPDATE_NOTIFIER,
                new EmptyUpdateNotifier( chart, gcs.getChartModel( ) ) );

        gr.render( idr, gcs );
    }

このリンクを参照してください

于 2012-09-07T17:36:38.710 に答える
1

BIRT についてはあまり詳しくありませんが、できることは、レンダラーを設定して画像をレンダリングBufferedImageし、そこからバイトを取得することです。

dRenderer = ce.getRenderer("dv.PNG");

BufferedImage img = new BufferedImage(size1, size2, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = (Graphics2D)img.getGraphics();
dRenderer.setProperty(IDeviceRenderer.GRAPHICS_CONTEXT, g2d);
dRenderer.setProperty(IDeviceRenderer.CACHED_IMAGE, img);

// render

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "png", baos);
baos.flush();
byte[] imgBytes = baos.toByteArray();

ただし、SVGでは機能しないと思います。しかし、BIRT でレポートを生成するための新しい API があるようです。そこでは、レンダラーにレンダリング オプション、特に を設定するオプションをOutputStream渡すことByteArrayOutputStreamができます。

于 2012-09-07T09:32:51.170 に答える
0

PNG をブラウザに直接返したい場合は、ある種のサーバー側の機構が必要です。ここでは、REST サービスでそれを行う方法を確認できます。

于 2012-09-07T09:40:19.670 に答える