トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

JasperReportのデザインをプログラムで作る

基本的なことはJasperReports と iReportを参照。

プログラムでデザインを作成する

大きくやるべきことは

  1. デザインの作成(レポート全体の設定)
  2. フィールドの設定
  3. 各Sectionの設定(HeaderとかDetailとか)
  4. 各Band(Sectionを構成する要素)へJRElementの追加

 デザインを作成する

XMLを直接出力しても良いが、JasperReportのAPIを使ったほうが良い。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.*;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.data.*;
import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.engine.xml.*;
import java.io.*;
import java.util.*;


public class test {
  public static void main(String[] args){
    new test();
  }
  
  public test(){
    try {
      try ( 
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("test.xml"));
        OutputStreamWriter writer = new OutputStreamWriter(bos);
        PrintWriter pw = new PrintWriter(writer);
        )
      {
        // デザインの設定
        JasperDesign jasperDesign = new JasperDesign();
        jasperDesign.setName("test1");
        jasperDesign.setLanguage("groovy");
        jasperDesign.setPageWidth(501);
        jasperDesign.setPageHeight(709);
        jasperDesign.setColumnWidth(461);
        jasperDesign.setLeftMargin(20);
        jasperDesign.setRightMargin(20);
        jasperDesign.setTopMargin(20);
        jasperDesign.setBottomMargin(20);
        jasperDesign.setWhenNoDataType(JRReport.WHEN_NO_DATA_TYPE_ALL_SECTIONS_NO_DETAIL );
        JRDesignField field = new JRDesignField();
        field.setName("val1");
        jasperDesign.addField(field);
        
        // title
        JRDesignBand band = new JRDesignBand();
        band.setHeight(30);
        band.setSplitType(JRBand.SPLIT_TYPE_STRETCH);
        jasperDesign.setTitle(band);
        band.addElement(getStaticText("test",226,0,100,20));
        
        // detail
        band = new JRDesignBand();
        band.setHeight(31);
        band.setSplitType(JRBand.SPLIT_TYPE_STRETCH);
        
        band.addElement(getText(
          "$F{val1}",
          String.class,
          10,10,100,20)
          );
        band.addElementGroup(getLines(10,0,100,30));
        
        band.addElement(
          getText2("$F{val1}",
          String.class,
          110,10,100,20)
          );
        band.addElementGroup(getLines(110,10,100,20));
        
        JRDesignSection section = (JRDesignSection)jasperDesign.getDetailSection();
        section.addBand(band);
        
        // 試しにXML出力
        String xml = JRXmlWriter.writeReport(jasperDesign,"UTF-8");
        pw.write(xml);
        
        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
        
        Map parameters = new HashMap();
        // parameters.put("Title", "Basic JasperReport");
        // parameters.put("MaxSalary", new Double(25000.00));
        // parameters.put("SUBREPORT_DIR","report\\");
        //
        
        BufferedReader br = new BufferedReader(new FileReader("data.csv"));
        JRCsvDataSource jrdata = new JRCsvDataSource(br);
        jrdata.setFieldDelimiter(',');
        jrdata.setUseFirstRowAsHeader(true);
        jrdata.setRecordDelimiter("\r\n");
        
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
          parameters, jrdata);
        
        JasperViewer.viewReport(jasperPrint);
        // JasperExportManager.exportReportToPdfFile(jasperPrint, "test.pdf");
        
      } catch (Exception writeError){
        writeError.printStackTrace();
      }
      
    } catch (Exception e){
      e.printStackTrace();
    }
  }
  
  JRDesignElement getStaticText(String text, int x, int y, int width, int height){
    JRDesignStaticText element = new JRDesignStaticText();
    element.setX(x);
    element.setY(y);
    element.setWidth(width);
    element.setHeight(height);
    element.setText(text);
    return element;
  }
  
  JRDesignElement getText(String text, Class textClass, int x, int y, int width, int height){
    JRDesignTextField element = new JRDesignTextField();
    element.setX(x);
    element.setY(y);
    element.setWidth(width);
    element.setHeight(height);
    
    JRDesignExpression exp = new JRDesignExpression();
    exp.setText(text);
    exp.setValueClass(textClass);
    element.setExpression(exp);
    element.setPdfFontName("HeiseiKakuGo-W5");
    element.setPdfEncoding("UniJIS-UCS2-H");
    
    return element;
  }
  
  JRDesignElement getText2(String text, Class textClass, int x, int y, int width, int height){
    JRDesignTextField element = new JRDesignTextField();
    element.setX(x);
    element.setY(y);
    element.setWidth(width);
    element.setHeight(height);
    
    JRDesignExpression exp = new JRDesignExpression();
    exp.setText(text);
    exp.setValueClass(textClass);
    element.setExpression(exp);
    element.setPdfEmbedded(true);
    element.setPdfFontName("Consolas_IPAG7_0.ttf");
    element.setPdfEncoding("Identity-H");
    
    return element;
  }
  
  JRDesignElementGroup getLines(int x, int y, int width, int height){
    JRDesignElementGroup group = new JRDesignElementGroup();
    JRDesignLine line = new JRDesignLine();
    line.setX(x);
    line.setY(y);
    line.setWidth(width);
    line.setHeight(0);
    group.addElement(line);
    
    line = new JRDesignLine();
    line.setX(x);
    line.setY(y);
    line.setWidth(0);
    line.setHeight(height);
    group.addElement(line);
    
    line = new JRDesignLine();
    line.setX(x);
    line.setY(y+height);
    line.setWidth(width);
    line.setHeight(0);
    group.addElement(line);
    
    line = new JRDesignLine();
    line.setX(x+width);
    line.setY(y);
    line.setWidth(0);
    line.setHeight(height);
    group.addElement(line);
    
    return group;
  }
}

グループとか集計等もできるけど、省略。


出力されるXMLの例

以下のようなXMLをプログラムで作成すれば良い。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test1" language="groovy" pageWidth="501" pageHeight="709" whenNoDataType="AllSectionsNoDetail" columnWidth="461" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
  <field name="val1" class="java.lang.String"/>
  <title>
    <band height="30" splitType="Stretch">
      <staticText>
        <reportElement x="226" y="0" width="100" height="20"/>
        <textElement/>
        <text><![CDATA[test]]></text>
      </staticText>
    </band>
  </title>
  <detail>
    <band height="31" splitType="Stretch">
      <textField>
        <reportElement x="10" y="10" width="100" height="20"/>
        <textElement>
          <font pdfFontName="HeiseiKakuGo-W5" pdfEncoding="UniJIS-UCS2-H"/>
        </textElement>
        <textFieldExpression class="java.lang.String"><![CDATA[$F{val1}]]></textFieldExpression>
      </textField>
      <elementGroup>
        <line>
          <reportElement x="10" y="0" width="100" height="1"/>
        </line>
        <line>
          <reportElement x="10" y="0" width="1" height="30"/>
        </line>
        <line>
          <reportElement x="10" y="30" width="100" height="1"/>
        </line>
        <line>
          <reportElement x="110" y="0" width="1" height="30"/>
        </line>
      </elementGroup>
    </band>
  </detail>
</jasperReport>

[カテゴリ: プログラミング言語 > Java]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2014年01月08日 21時50分11秒