では、前回の「統計値表をPDFに出力」に 条件付き書式をさらに発展させて、棒グラフ風の可視化(セル幅を値に応じて伸ばす) を加えるサンプルを紹介します。
サンプルコード:棒グラフ風セル付き PdfPTable
import java.io.FileOutputStream;
import java.util.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
public class ChartPDFWithBarCells {
public static void main(String[] args) {
// ダミーデータ
Map<String, List<Integer>> datasets = new LinkedHashMap<>();
datasets.put("データセット1", Arrays.asList(3, 5, 2, 7));
datasets.put("データセット2", Arrays.asList(2, 4, 6, 5));
try {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("chart_with_bar_cells.pdf"));
document.open();
document.add(new Paragraph("=== 棒グラフ風セル付き統計表 ===\n\n"));
PdfPTable table = new PdfPTable(2); // 列数: ラベル, 棒グラフ風セル
table.setWidthPercentage(100);
// ヘッダー
PdfPCell h1 = new PdfPCell(new Phrase("データセット"));
h1.setBackgroundColor(BaseColor.LIGHT_GRAY);
table.addCell(h1);
PdfPCell h2 = new PdfPCell(new Phrase("値の可視化"));
h2.setBackgroundColor(BaseColor.LIGHT_GRAY);
table.addCell(h2);
// 最大値を全体から取得(スケーリング用)
int globalMax = datasets.values().stream()
.flatMap(List::stream)
.max(Integer::compareTo)
.orElse(1);
// 各データセットを行として追加
for (Map.Entry<String, List<Integer>> entry : datasets.entrySet()) {
String label = entry.getKey();
List<Integer> values = entry.getValue();
table.addCell(label);
// 棒グラフ風のサブテーブル
PdfPTable barTable = new PdfPTable(values.size());
for (int val : values) {
// 値に応じてセルの背景色を塗る
PdfPCell cell = new PdfPCell(new Phrase(String.valueOf(val)));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
// 値に応じて色を変える(例:平均以上は緑、未満は赤)
double avg = values.stream().mapToInt(Integer::intValue).average().orElse(0);
if (val >= avg) {
cell.setBackgroundColor(new BaseColor(144, 238, 144)); // ライトグリーン
} else {
cell.setBackgroundColor(new BaseColor(255, 182, 193)); // ライトピンク
}
// 値に応じてセルの最小高さを調整(棒グラフ風)
float barHeight = (float) val / globalMax * 30f; // 最大30pt高さ
cell.setMinimumHeight(barHeight + 15); // 数字表示分を足す
barTable.addCell(cell);
}
PdfPCell barCell = new PdfPCell(barTable);
table.addCell(barCell);
}
document.add(table);
document.close();
System.out.println("chart_with_bar_cells.pdf に保存しました。");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java✅ 実行結果
- chart_with_bar_cells.pdf が生成されます
- 各データセットの行に「値の可視化」列があり、セルの高さと色で棒グラフ風に表現されます
- 平均以上の値は緑、未満は赤で表示され、直感的に比較可能
ポイント
setMinimumHeight()を値に応じて変化させることで「棒の長さ」を表現setBackgroundColor()で条件付き書式(平均以上=緑、未満=赤)を実現- サブテーブルを使って複数の値を横並びに表示
👉 これで「統計値表+棒グラフ風セルのPDF出力」が完成しました。

