BIRT runtime dynamic chart scaling

mantisa
edited February 11, 2022 in Analytics #1
Hi, I'm writting a composite report engine that allows users to select some reports and render them as one, merging all HTML outputs for each sub-report in the same HTML file, reducing charts size. The issue is how to resize charts before rendering the sub-report without lossing image quality.

I tried something like this:

ReportDesignHandle reportHandle = (ReportDesignHandle) runnable.getDesignHandle();
ReportItemHandle handle = (ReportItemHandle) reportHandle.findElement("NewChart");
handle.setWidth("6in");
handle.setHeight("4in");

But the generated image output has a sensible loss of quality.

Does anybody know another way?

Comments

  • mantisa
    edited December 31, 1969 #2
    Hi, I have solved this problem by my self. For example, this code resizes the chart to a half:

    ReportDesignHandle reportHandle = (ReportDesignHandle) runnable.getDesignHandle();
    ReportItemHandle handle = (ReportItemHandle) reportHandle.findElement("NewChart");
    ExtendedItemHandle eHandle = (ExtendedItemHandle) handle;
    ChartWithAxes chart = (ChartWithAxes) eHandle.getReportItem().getProperty("chart.instance");
    double oldWidth = chart.getBlock().getBounds().getWidth();
    double oldHeight = chart.getBlock().getBounds().getHeight();
    chart.getBlock().getBounds().setWidth(oldWidth / 2);
    chart.getBlock().getBounds().setHeight(oldHeight / 2);
    handle.setWidth(handle.getWidth().getMeasure() / 2);
    handle.setHeight(handle.getHeight().getMeasure() / 2);

    Note that you also need to resize all the parent elements of the chart (for example grid cells) and the property bounds is only neccesary (and avaliable) in charts.