java - Save jzy3d Chart in PDF using DynamicReports -
i'm using dynamicreports api create pdf report displaying results of java
application (tables , charts). 1 of chart have display 3d surface plot
build using jzy3d 0.9.0.
here code:
import static net.sf.dynamicreports.report.builder.dynamicreports.*; import net.sf.dynamicreports.examples.templates; import net.sf.dynamicreports.examples.complex.invoice.invoicedesign; import net.sf.dynamicreports.examples.complex.sales.salesdesign; import net.sf.dynamicreports.jasper.builder.jasperreportbuilder; import net.sf.dynamicreports.report.constant.horizontalimagealignment; import net.sf.dynamicreports.report.constant.horizontaltextalignment; import net.sf.dynamicreports.report.constant.pagetype; import net.sf.dynamicreports.report.constant.verticalimagealignment; import net.sf.dynamicreports.report.constant.verticaltextalignment; import net.sf.dynamicreports.report.builder.chart.piechartbuilder; import net.sf.dynamicreports.report.builder.component.componentbuilder; import net.sf.dynamicreports.report.builder.component.componentbuilders; import net.sf.dynamicreports.report.builder.component.textfieldbuilder; import net.sf.dynamicreports.report.builder.style.fontbuilder; import net.sf.dynamicreports.report.builder.style.stylebuilder; import net.sf.dynamicreports.report.constant.pageorientation; import net.sf.dynamicreports.report.datasource.drdatasource; import net.sf.jasperreports.engine.jrdatasource; import net.sf.dynamicreports.jasper.builder.export.exporters; import net.sf.dynamicreports.report.builder.column.textcolumnbuilder; import net.sf.dynamicreports.report.builder.component.horizontallistbuilder; import javax.swing.jframe; import com.fairdynamics.components.fdpalette; import com.fairdynamics.components.fdglasspane; import com.fairdynamics.components.fdoptionpane; import fairdynamics.lyrica.ui_visualanalytics.uirespondersheatmap.heatmapdetails; import javax.swing.imageicon; import org.jzy3d.maths.*; import org.jzy3d.plot3d.builder.*; import org.jzy3d.plot3d.builder.concrete.orthonormalgrid; import org.jzy3d.colors.colormapper; import org.jzy3d.colors.colormaps.colormaprainbow; import org.jzy3d.plot3d.primitives.shape; import org.jzy3d.chart.chart; import org.jzy3d.plot3d.rendering.canvas.quality; import org.jzy3d.chart.chartlauncher; import org.jzy3d.plot3d.builder.mapper; public class ui_reportbuilder3 extends jasperreportbuilder{ protected final fontbuilder font18 = stl.font("roboto light",false,false,18); protected final fontbuilder font16 = stl.font("roboto light",false,false,16); protected final fontbuilder font14 = stl.font("roboto light",false,false,14); protected final fontbuilder font12 = stl.font("roboto light",false,false,12); protected final fontbuilder font10 = stl.font("roboto light",false,false,10); protected final stylebuilder titlestyle = stl.style(font12).setverticaltextalignment(verticaltextalignment.top).setforegroundcolor(fdpalette.primarycolor); protected final stylebuilder maintitlestyle = stl.style(font18).setverticaltextalignment(verticaltextalignment.top).setforegroundcolor(fdpalette.primarycolor); protected final stylebuilder subtitlestyle = stl.style(font14).setverticaltextalignment(verticaltextalignment.top).setforegroundcolor(fdpalette.primarycolor); protected final stylebuilder footerstyle = stl.style(font10).setverticaltextalignment(verticaltextalignment.middle).setforegroundcolor(fdpalette.secondarytext); protected final stylebuilder colstyle = stl.style(font12).setverticaltextalignment(verticaltextalignment.middle); public ui_reportbuilder3() { try{ .settemplate(templates.reporttemplate) .setpageformat(pagetype.a4,pageorientation.portrait) .setpagemargin(margin(40)) .pagefooter( cmp.text("footer").setstyle(footerstyle).sethorizontaltextalignment(horizontaltextalignment.center) ) .title( cmp.horizontallist().add( cmp.text("title").setstyle(maintitlestyle).sethorizontaltextalignment(horizontaltextalignment.left) ) .setfixedheight(32) ) .summary( cmp.multipagelist(cmp.image(createheatmap().screenshot()) ) ) .show() ; }catch(exception e){ e.printstacktrace(); } } private org.jzy3d.chart.chart createheatmap(){ // define function plot mapper mapper = new mapper() { public double f(double x, double y) { return 10 * math.sin(x / 10) * math.cos(y / 20) * x; } }; // define range , precision function plot range range = new range(-150, 150); int steps = 50; // create surface drawing function org.jzy3d.plot3d.primitives.shape surface = builder.buildorthonormal(new orthonormalgrid(range, steps, range, steps), mapper); surface.setcolormapper(new colormapper(new colormaprainbow(), surface.getbounds().getzmin(), surface.getbounds().getzmax(), new org.jzy3d.colors.color(1, 1, 1, .5f))); surface.setfacedisplayed(true); surface.setwireframedisplayed(false); surface.setwireframecolor(org.jzy3d.colors.color.black); // create chart , add surface org.jzy3d.chart.chart chart = new org.jzy3d.chart.chart(quality.advanced); chart.getscene().getgraph().add(surface); return chart; } }
this code works if call method chartlauncher.openchart(chart)
(consequently opening frame chart displayed in) createheatmap()
before returning chart
, otherwise createheatmap().screenshot()
returns null
. if need create , export pdf of chart without displaying chart in java application?
note: if possible, i'd prefer use jzy3d 0.9.0 , not jzy3d 0.9.1 because otherwise should modify lot of code written , tested.
able capture screenshot in way:
chart c = awtchartcomponentfactory.chart(quality.nicest,org.jzy3d.chart.factories.ichartcomponentfactory.toolkit.offscreen); c.screenshot(); bufferedimage = ((offscreencanvas)c.getcanvas()).getrenderer()).getlastscreenshotimage();
Comments
Post a Comment