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

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -