2.

JasperReports (Java 帳票ライブラリ) 完全ガイド

編集
この記事の要点
  • JasperReportsJaspersoft 社が開発する Java 製の帳票ライブラリ
  • XML テンプレート (.jrxml) を Jaspersoft Studio (Eclipse ベース GUI) で設計
  • 出力: PDF / Excel / Word / HTML / CSV / RTF / ODT
  • データソース: JDBC / JSON / XML / CSV / JavaBean、サブレポート/グラフ可
  • ライセンス: LGPL v3 (OSS、商用利用可)。Server / Cloud は有償エディション (現 TIBCO 傘下)

JasperReports とは

JasperReports は、Java アプリケーションから帳票 (PDF / Excel 等) を生成するための業界標準ライブラリ。Jaspersoft 社が 2001 年に公開し、現在はTIBCO Software (旧 Jaspersoft 親会社) が管理しています。バージョンは 2026 年時点でJasperReports Library 6.x

主な特徴

項目内容
テンプレート形式XML (.jrxml) → コンパイル後 .jasper
設計ツールJaspersoft Studio (Eclipse ベース、無料)
出力フォーマットPDF, XLS/XLSX, DOCX, PPTX, HTML, RTF, CSV, ODT, ODS
データソースJDBC, JSON, XML, CSV, JavaBean Collection, Hibernate, MongoDB, REST
レイアウト機能サブレポート、グラフ、QR/バーコード、画像、表、クロス集計
スクリプトJava / Groovy 式を埋め込み可能
国際化多言語ロケール、日本語フォント対応
ライセンスLGPL v3

製品エディション

製品用途価格
JasperReports LibraryJava 組込ライブラリ無料 (LGPL)
Jaspersoft Studioテンプレート設計 GUI無料 (EPL)
JasperReports ServerWeb で帳票実行 / 配信Community 無料 / Pro 有償
Jaspersoft for CloudSaaS BI プラットフォーム有償

Maven 依存追加

<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>6.21.3</version>
</dependency>

<!-- PDF 出力用 -->
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7</version>
</dependency>

<!-- Excel 出力用 -->
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>5.2.5</version>
</dependency>

シンプルな帳票生成 (PDF)

import net.sf.jasperreports.engine.*;
import java.util.*;
import java.sql.*;

public class ReportSample {
  public static void main(String[] args) throws Exception {
    // 1. パラメータ
    Map<String, Object> params = new HashMap<>();
    params.put("ReportTitle", "売上レポート");
    params.put("FromDate", "2026-01-01");

    // 2. データソース (JDBC)
    Connection conn = DriverManager.getConnection(
      "jdbc:postgresql://localhost/mydb", "user", "pass");

    // 3. コンパイル済テンプレート読み込み
    JasperReport report = (JasperReport)
      JRLoader.loadObject(new File("sales.jasper"));

    // 4. レポート実行
    JasperPrint print = JasperFillManager.fillReport(report, params, conn);

    // 5. PDF 出力
    JasperExportManager.exportReportToPdfFile(print, "output.pdf");

    conn.close();
  }
}

JRXML (テンプレート) の構造

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
              name="sales" pageWidth="595" pageHeight="842" columnWidth="555">
  <parameter name="ReportTitle" class="java.lang.String"/>

  <queryString>
    <![CDATA[SELECT id, name, amount FROM sales WHERE date >= $P{FromDate}]]>
  </queryString>

  <field name="id" class="java.lang.Long"/>
  <field name="name" class="java.lang.String"/>
  <field name="amount" class="java.math.BigDecimal"/>

  <title>
    <band height="50">
      <textField>
        <reportElement x="0" y="0" width="555" height="40"/>
        <textElement textAlignment="Center"><font size="20"/></textElement>
        <textFieldExpression><![CDATA[$P{ReportTitle}]]></textFieldExpression>
      </textField>
    </band>
  </title>

  <columnHeader>
    <band height="20">
      <staticText><reportElement x="0" y="0" width="100" height="20"/>
        <text>ID</text></staticText>
      <staticText><reportElement x="100" y="0" width="300" height="20"/>
        <text>名前</text></staticText>
      <staticText><reportElement x="400" y="0" width="155" height="20"/>
        <text>金額</text></staticText>
    </band>
  </columnHeader>

  <detail>
    <band height="20">
      <textField><reportElement x="0" y="0" width="100" height="20"/>
        <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression></textField>
      <textField><reportElement x="100" y="0" width="300" height="20"/>
        <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression></textField>
      <textField><reportElement x="400" y="0" width="155" height="20"/>
        <textFieldExpression><![CDATA[$F{amount}]]></textFieldExpression></textField>
    </band>
  </detail>
</jasperReport>

JRXML を Java からコンパイル

// jrxml → jasper にコンパイル
JasperCompileManager.compileReportToFile("sales.jrxml", "sales.jasper");

// または毎回コンパイル (開発時)
JasperReport report = JasperCompileManager.compileReport("sales.jrxml");

Spring Boot との統合

@RestController
@RequiredArgsConstructor
public class ReportController {
  private final DataSource dataSource;

  @GetMapping(value = "/report.pdf", produces = MediaType.APPLICATION_PDF_VALUE)
  public byte[] report() throws Exception {
    JasperReport tpl = (JasperReport) JRLoader.loadObject(
      new ClassPathResource("reports/sales.jasper").getFile());

    try (Connection conn = dataSource.getConnection()) {
      JasperPrint print = JasperFillManager.fillReport(
        tpl, Map.of("ReportTitle", "Sales"), conn);
      return JasperExportManager.exportReportToPdf(print);
    }
  }
}

サブレポート / グラフ

  • サブレポート: 親レポート内に <subreport> を配置。明細を別レポート化
  • グラフ: 棒 / 線 / 円 / 散布 / メーター。JFreeChart ベース
  • クロス集計: <crosstab> 要素でピボットテーブル風出力
  • バーコード: Barcode4J / Barbecue 連携
  • QR コード: ZXing と連携

日本語フォントの注意

<!-- jasperreports_extension.properties -->
net.sf.jasperreports.extension.registry.factory.fonts=\
  net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families=fonts/fontsfamily.xml
<!-- fonts/fontsfamily.xml -->
<fontFamilies>
  <fontFamily name="IPAGothic">
    <normal>fonts/ipag.ttf</normal>
    <bold>fonts/ipag.ttf</bold>
    <pdfEncoding>Identity-H</pdfEncoding>
    <pdfEmbedded>true</pdfEmbedded>
    <exportFonts>
      <export key="net.sf.jasperreports.html">'IPA Gothic', sans-serif</export>
    </exportFonts>
  </fontFamily>
</fontFamilies>

JRXML 側で fontName="IPAGothic" を指定。PDF 埋め込み (pdfEmbedded=true) しないと文字化けの原因に。

主な競合 / 代替

ツール言語特徴
JasperReportsJava業界標準、機能豊富、LGPL
BIRTJavaEclipse 系、無料、開発活発度低下
Pentaho ReportingJavaHitachi Vantara、BI 統合
iTextJavaPDF 直接生成、低レベル、AGPL/商用
Apache PDFBoxJavaPDF 操作ライブラリ、レポート機能無し
SAP Crystal Reports独自商用、企業向け定番
FastReport.NET / Java商用、デザインしやすい

JasperReports Server (Web UI)

  • JasperReports の Web 実行サーバ。Tomcat ベース
  • ブラウザから帳票実行、PDF/Excel ダウンロード、スケジュール配信
  • マルチテナント、ユーザロール、ダッシュボード
  • Community 版 (無料) と Pro 版 (有償、SLA / 拡張機能)

FAQ

Q: 商用利用に LGPL の制約はある?
A: ライブラリとして動的リンクすれば自社製品ソースの開示義務なし。改変した JasperReports 自体は LGPL のまま公開義務あり。

Q: PDF が文字化けする
A: 日本語フォント未埋め込みが原因の 9 割。pdfFontName / pdfEncoding=Identity-H / pdfEmbedded=true を確認。

Q: 開発の活発度は?
A: TIBCO 傘下後はやや停滞気味だが、メジャーバージョンアップは継続中。エンタープライズ Java 帳票では依然デファクト。

編集
Post Share
子ページ
  1. jar内のjrxml/jasperファイルを読み込む方法
  2. jar内のサブレポートを読み込む方法
同階層のページ
  1. Hibernate
  2. JasperReport

最近更新/作成されたページ