Skip to content

Commit 045c555

Browse files
chart
1 parent 6eef39f commit 045c555

File tree

4 files changed

+108
-0
lines changed

4 files changed

+108
-0
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,7 @@ dependencies {
3232
compile('com.h2database:h2')
3333
compile('org.springframework.boot:spring-boot-starter-security')
3434
compile('org.springframework.boot:spring-boot-starter-mail')
35+
36+
// https://mvnrepository.com/artifact/org.jfree/jfreechart
37+
compile group: 'org.jfree', name: 'jfreechart', version: '1.5.0'
3538
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package d00000.webapp;
2+
3+
import org.jfree.chart.ChartFactory;
4+
import org.jfree.chart.ChartUtils;
5+
import org.jfree.chart.JFreeChart;
6+
import org.jfree.data.category.DefaultCategoryDataset;
7+
import org.springframework.stereotype.Controller;
8+
import org.springframework.ui.ModelMap;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PostMapping;
11+
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RequestParam;
13+
14+
import java.io.ByteArrayOutputStream;
15+
import java.io.IOException;
16+
import java.util.Base64;
17+
18+
/**
19+
* チャート
20+
*/
21+
@Controller
22+
@RequestMapping("/chart")
23+
public class ChartController {
24+
25+
/** 入力(フォーム) */
26+
@GetMapping("input")
27+
public String input() {
28+
return "chart/input";
29+
}
30+
31+
/** 処理(フォームから受け取り表示) */
32+
@PostMapping("process")
33+
public String process(@RequestParam("data1") String data1, @RequestParam("data2") String data2, ModelMap modelMap) {
34+
// データセットを作成
35+
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
36+
37+
// data1をデータセットに追加
38+
String[] valueArray1 = data1.split("\n");
39+
for (int i=0; i<valueArray1.length; i++) {
40+
double value = Double.valueOf(valueArray1[i]);
41+
dataset.addValue(value, "data1", String.valueOf(i));
42+
}
43+
44+
// data2をデータセットに追加
45+
String[] valueArray2 = data2.split("\n");
46+
for (int i=0; i<valueArray2.length; i++) {
47+
double value = Double.valueOf(valueArray2[i]);
48+
dataset.addValue(value, "data2", String.valueOf(i));
49+
}
50+
51+
// チャートを作成
52+
JFreeChart chart = ChartFactory.createLineChart("タイトル", "カテゴリー", "値", dataset);
53+
54+
try {
55+
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 画像の出力先
56+
ChartUtils.writeChartAsPNG(byteArrayOutputStream, chart, 600, 400); // チャートをPNG画像として出力
57+
String base64string = Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray()); // 画像をBase64でエンコード
58+
String dataUri = "data:image/png;base64," + base64string; // data URIの文字列を作成
59+
modelMap.addAttribute("dataUri", dataUri);
60+
} catch (IOException e) {
61+
e.printStackTrace();
62+
}
63+
return "chart/process";
64+
}
65+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<!DOCTYPE html>
2+
<html xmlns:th="http://www.thymeleaf.org">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>チャート生成サンプル</title>
6+
</head>
7+
<body>
8+
9+
<h1>チャート生成サンプル</h1>
10+
11+
<h2>入力(フォーム)</h2>
12+
13+
改行区切りで数値を入力
14+
15+
<form th:action="@{/chart/process}" method="post">
16+
data1:<br/>
17+
<textarea name="data1" rows="10"></textarea><br/>
18+
data2:<br/>
19+
<textarea name="data2" rows="10"></textarea><br/>
20+
<button type="submit">送信</button>
21+
</form>
22+
23+
</body>
24+
</html>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!DOCTYPE html>
2+
<html xmlns:th="http://www.thymeleaf.org">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>チャート生成サンプル</title>
6+
</head>
7+
<body>
8+
9+
<h1>チャート生成サンプル</h1>
10+
11+
<h2>処理(フォームから受け取り表示)</h2>
12+
13+
<img th:src="${dataUri}">
14+
15+
</body>
16+
</html>

0 commit comments

Comments
 (0)