LoginSignup
5
3

More than 1 year has passed since last update.

Jasper帳票PDF出力備忘メモ ~ 複数のリストによる帳票出力 ~

Last updated at Posted at 2021-06-21

上記記事の続き

前回の帳票PDF出力では、JRBeanCollectionDataSourceを利用してListに格納された値をJasperテンプレートに埋め込んで帳票出力を行っていたが、今回は複数のListをテンプレートに埋め込む方法について検証したのでその時の内容を備忘メモとして残す。

基本的にはこちらに記載されている内容の通りである。

また、コードの実装例などは大幅に省略しているので細かいことは前回の記事を参照すること

Jasper側の実装

1. データセット/パラメータの作成

Outlineで右クリックを選択し、Create Datasetを選択すると下記画面が表示されるので必要事項を入力しデータセットを作成する。

image.png

  • Dataset name:データセット名を入力
  • Data Adapter:「New Data Adapter -Collection of JavaBeans」を選択

Outline上に作成したDataset1が表示されるので、Dataset1Fieldsを右クリックでCreate Fieldを選択し、フィールドを作成する。

  • Field01
    • Name: name 
    • Class:java.lang.String
  • Field02
    • Name: parameter
    • Class:java.lang.String

次にOutlineからParametersを選択しパラメータを追加する。

設定値は下記の通りである。

  • Name:datasource1
  • Class:java.util.List

XMLでは下記の設定となる。

<!-- データセット定義 -->
<subDataset name="Dataset1">
  <field name="name" class="java.lang.String"/>
  <field name="parameter" class="java.lang.String"/>
</subDataset>

<!-- パラメータ定義 -->
<parameter name="datasource1" class="java.util.List"/>

2. Listの作成

PaletteからListを選択し、データセットとして先ほど作成したDataset1を指定する。

image.png

Connectionでは「Use a JRDatasource expression」を選択し、下記設定を指定する。

$P{datasource1}には上で作成したパラメータ名を指定すること。

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})

image.png

List fieldsでDataset1のフィールドを選択する。

image.png

List作成後、下図のListを選択するとリスト部の編集画面が表示されるの文字幅やフォントなど細かな設定を行う。

image.png

以上の作業を行った場合、XMLでは下記の設定となる。

  <componentElement>
    <reportElement x="261" y="65" width="100" height="30" uuid="46944fc3-2ae0-4385-9dc2-8f347b76c260"/>
    <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
      <datasetRun subDataset="Dataset1" uuid="53aa30da-b1f7-4221-b76c-a72666e1a6f9">
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression>
      </datasetRun>
      <jr:listContents height="30" width="100">
        <textField>
          <reportElement x="0" y="0" width="50" height="30" uuid="ac884e55-7578-4e95-aea3-955a56ee00aa"/>
          <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
        </textField>
        <textField>
          <reportElement x="50" y="0" width="50" height="30" uuid="5e8b1136-3781-41e0-bfdc-7e32fed0e30c"/>
          <textFieldExpression><![CDATA[$F{parameter}]]></textFieldExpression>
        </textField>
      </jr:listContents>
    </jr:list>
  </componentElement>

Java側の実装

新たなリスト項目として下記Entityクラスを用意する。

Entiry.java
@Getter
@Setter
public class Entity{

    private String name;

    private String parameter;

}

帳票出力処理として下記を実装する。

//Entityクラスのリストを準備
List<Entity> entityList= new ArrayList<>();
Entity entity01 = new Entity();
entity01.setName("Test User01");
entity01.setParameter("Parameter01");
entityList.add(entity01);

Entity entity02 = new Entity();
entity02.setName("Test User02");
entity02.setParameter("Parameter02");
entityList.add(entity02);

//parameterMapの作成
HashMap<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("datasource1", entityList);

//前回同様JasperFillManagerでparameterMapを渡す
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, jrBeanCollectionDataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, "jasper.pdf");

出力結果

これらの設定後、PDF出力を実行した結果が下図である。

image.png

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3