Java 在fillReport中传递JRactSvgRenderer(JRenderable)

Java 在fillReport中传递JRactSvgRenderer(JRenderable),java,swing,jasper-reports,Java,Swing,Jasper Reports,我正在使用JasperFillManager.fillReport将JRastractSvgRender的一个简单实现(取自ireports pdf手册)作为参数之一传递 public class CustomImageRenderer extends JRAbstractSvgRenderer { @Override public void render(Graphics2D g2d, Rectangle2D rect) throws JRException {

我正在使用JasperFillManager.fillReport将JRastractSvgRender的一个简单实现(取自ireports pdf手册)作为参数之一传递

public class CustomImageRenderer extends JRAbstractSvgRenderer {

    @Override
    public void render(Graphics2D g2d, Rectangle2D rect) throws JRException {
        System.out.println("CustomImageRenderer.render");
        // Save the Graphics2D affine transform
        AffineTransform savedTrans = g2d.getTransform();
        Font savedFont = g2d.getFont();
        // Paint a nice background...
        g2d.setPaint(new GradientPaint(0, 0, Color.ORANGE,
            0, (int) rect.getHeight(), Color.PINK));
        g2d.fillRect(0, 0, (int) rect.getWidth(), (int) rect.getHeight());
        Font myfont = new Font("Arial Black", Font.PLAIN, 50);
        g2d.setFont(myfont);
        FontRenderContext frc = g2d.getFontRenderContext();
        String text = new String("JasperReports!!!");
        TextLayout textLayout = new TextLayout(text, myfont, frc);
        Shape outline = textLayout.getOutline(null);
        Rectangle r = outline.getBounds();
        // Translate the graphic to center the text
        g2d.translate(
            (rect.getWidth() / 2) - (r.width / 2),
            rect.getHeight() / 2 + (r.height / 2));
        g2d.setColor(Color.BLACK);
        g2d.draw(outline);
        // Restore the Graphics2D affine transform
        g2d.setFont(savedFont);
        g2d.setTransform(savedTrans);
    }
}

JasperPrint jasperPrint = JasperFillManager.fillReport(path, parameters, conn);
我已将报告中的图像组件链接到此参数,但图像不会显示。我错过了什么


我想完成的是最终将一个已经创建的Java2D图像传递给我的报告,但我不想将其作为光栅图像传递。

我不知道
JasperReports
,但您可以轻松地创建一个屏幕外
java.awt.image

private Image getImage(int h, int w) {
    BufferedImage bi = new BufferedImage(h, w, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = bi.createGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                         RenderingHints.VALUE_ANTIALIAS_ON);
    // your drawing code
    g2d.dispose();
    return bi;
}
作为预览渲染的便捷方法,您可以创建显示图像的
JComponent
,例如:

JLabel label = new JLabel(new ImageIcon(getImage(h, w)));

附录:您还可以尝试确定渲染器是否被调用,或者它是否以某种方式不渲染任何内容。如果是后者,则可以将渲染代码简化到最低限度,例如设置颜色和填充
rect

但我不想要光栅图像。啊,这是有道理的。见上文。
JLabel label = new JLabel(new ImageIcon(getImage(h, w)));