Передача JRAbstractSvgRenderer (JRRenderable) в fillReport - PullRequest
0 голосов
/ 26 февраля 2010

Я передаю простую реализацию JRAbstractSvgRenderer (взятую из руководства по ireports pdf) в качестве одного из параметров, используя JasperFillManager.fillReport.

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);
    }
}

...

Map parameters = new HashMap();
parameters.put("IMAGEPARAM", new CustomImageRenderer());

...

JasperPrint jasperPrint = JasperFillManager.fillReport(path, parameters, conn);

Я связал компонент Image в своем отчете с этим параметром, но изображение не отображается. Что мне здесь не хватает?

Я хотел бы в конечном итоге передать уже созданный образ Java2D в свой отчет, но я не хочу передавать его как растровое изображение.

1 Ответ

0 голосов
/ 26 февраля 2010

Я не знаю 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...