私はチャートを生成しようとしていて、次のコードでレスポンスでレンダリングしています。PNG形式でエンコードする前にJFreeChartのサイズを変更するには
Applicationクラス
@SpringBootApplication
@EnableWebMvc
@EnableWebSecurity
public class JChartPoc extends WebSecurityConfigurerAdapter{
public static void main(String[] args) {
SpringApplication.run(JChartPoc.class, args);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/**").permitAll()
.and()
.csrf().disable();
}
}
チャートは寸法500×500と完全に微細なレンダリングが、私は、これらの寸法を指定する場合には、352×90
として画像をレンダリングする制約を有しますグラフは切り捨てられます。
Iは
コントローラクラスに次のコードで折れ線グラフを生成しました。
@RestController
public class LineChartController {
@RequestMapping(value = "chartsPNG", method = RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE)
public ResponseEntity<byte[]> getPNGChart(@RequestHeader HttpHeaders headers)
throws Exception {
List<String> acceptLanguageList = headers
.get(HttpHeaders.ACCEPT_LANGUAGE);
String acceptLanguage = acceptLanguageList.get(0);
if (acceptLanguage.equalsIgnoreCase("en-us")) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ChartUtilities.writeBufferedImageAsPNG(baos, createLineChart().createBufferedImage(380, 90));
return new ResponseEntity<byte[]>(baos.toByteArray(), HttpStatus.OK);
}
return new ResponseEntity<byte[]>("Language Not Supported".getBytes(),
HttpStatus.I_AM_A_TEAPOT);
}
private JFreeChart createLineChart() {
DefaultCategoryDataset lineDataSet = new DefaultCategoryDataset();
lineDataSet.setValue(122, "weekly", "3 Weeks Ago");
lineDataSet.setValue(200, "weekly", "2 Weeks Ago");
lineDataSet.setValue(246, "weekly", "1 Week Ago");
lineDataSet.setValue(348, "weekly", "This Week");
JFreeChart lineChart = ChartFactory.createLineChart(null, null, null,lineDataSet);
modifyChart(lineChart);
return lineChart;
}
protected void modifyChart(JFreeChart chart) {
// plot manipulations
CategoryPlot categoryPlotModifier = chart.getCategoryPlot();
categoryPlotModifier.getRangeAxis().setTickLabelsVisible(false);
categoryPlotModifier.setOutlineVisible(false);
categoryPlotModifier.getRangeAxis().setVisible(false);
categoryPlotModifier.getDomainAxis().setTickMarkInsideLength(10);
categoryPlotModifier.getDomainAxis().setCategoryLabelPositionOffset(6);
categoryPlotModifier.getDomainAxis().setLabelFont(
new Font("SansSerif", Font.PLAIN, 100));
categoryPlotModifier.setAxisOffset(new RectangleInsets());
// categoryPlotModifier.getRangeAxis().resizeRange(500.);
// change fonts on charts
categoryPlotModifier.setBackgroundPaint(Color.WHITE);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryPlotModifier
.getRenderer();
renderer.setBaseShape(new Polygon(), true);
renderer.setBaseFillPaint(Color.WHITE, true);
renderer.setBaseShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
// renderer.setSeriesStroke(0, new BasicStroke(1), true);
CategoryItemLabelGenerator labelGenerator = new StandardCategoryItemLabelGenerator(
"{2}", new DecimalFormat("0.00"));
renderer.setBaseItemLabelGenerator(labelGenerator);
renderer.setBaseItemLabelsVisible(true, true);
// renderer.setBasePaint(Color.GREEN, true);
// why not baseColor and why can't we change the color of individual
// series
renderer.setSeriesPaint(0, ChartColor.VERY_DARK_MAGENTA, true);
// logger.info(Boolean.toString(renderer.getBaseShapesVisible()));
chart.removeLegend();
}
}
コントローラでこの行は
ChartUtilities.writeBufferedImageAsPNG(BAOを、createLineChart()createBufferedImage(380、 90)。)レンダリングするために使用される大きさを制御します。
スムージングされずに適切にサイズが変更された352 x 90 PNGイメージとしてレンダリングするためにグラフのサイズを変更する方法はありますか?
90ピクセルはあまりありません。あなたの問題を示す[mcve]を含むように質問を編集してください。 [screenshots](http://meta.stackoverflow.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post)および/または目的の結果の図は、問題がはっきりしない。 – trashgod
@trashgodエラーを再現するために最小限のコードで質問を更新しました。 – Norbert
範囲軸上で、[ここ](http://stackoverflow.com/search?tab=votes&q=%5bjfreechart%5d%20setUpperMargin)に記載されている 'setUpperMargin()'を試してみるかもしれません。 – trashgod