基本的なことは[[JasperReports と iReport]]を参照。 !!!プログラムでデザインを作成する 大きくやるべきことは +デザインの作成(レポート全体の設定) +フィールドの設定 +各Sectionの設定(HeaderとかDetailとか) +各Band(Sectionを構成する要素)へJRElementの追加 !!デザインを作成する XMLを直接出力しても良いが、JasperReportのAPIを使ったほうが良い。 {{code Java, 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をプログラムで作成すれば良い。 {{code HTML, <band height="30" splitType="Stretch"> <staticText> <reportElement x="226" y="0" width="100" height="20"/> <textElement/> <text><![CDATA[test]]></text> </staticText> </band> }} {{category2 プログラミング言語,Java}}