JasperReports:在模板中将ArrayList打印到TextFields

时间:2014-02-20 10:23:47

标签: java pdf jasper-reports

我有这段代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class TestReport {
    public void runReport() {
        try {
            List<Text> list = new ArrayList<Text>(3);
            list.add(new Text("a1"));
            list.add(new Text("b1"));
            list.add(new Text("c1"));

            Map parameters = new HashMap();
            parameters.put("text", list);           

            JasperPrint print = JasperFillManager.fillReport("report1.jasper", parameters, new JRBeanCollectionDataSource(list));

            JasperExportManager.exportReportToPdfFile(print, "report1.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private class Text {        
        private String txt;     
        public Text() {}                
        public Text(String txt) {this.txt = txt;}
        public void setTxt(String txt) {this.txt = txt;}        
        public String getTxt() {return txt;}
    }

    public static void main(String args[]) {
        new TestReport().runReport();
    }
}

我需要生成在“详细信息”部分中包含“文本字段”的PDF。

enter image description here

我尝试使用“JavaBeans set datasource”但它崩溃了:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:68)
    at net.sf.jasperreports.engine.JRPropertiesUtil.loadProperties(JRPropertiesUtil.java:99)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.initProperties(DefaultJasperReportsContext.java:94)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<init>(DefaultJasperReportsContext.java:71)
    at net.sf.jasperreports.engine.DefaultJasperReportsContext.<clinit>(DefaultJasperReportsContext.java:59)
    at net.sf.jasperreports.engine.JasperFillManager.getDefaultInstance(JasperFillManager.java:85)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:915)
    at TestReport.runReport(TestReport.java:26)
    at TestReport.main(TestReport.java:49)

我的模板不好。你能帮我(或发给我示例模板)如何创建像图像一样的工作模板?第一个文本字段应包含“a1”,第二个“b1”,...

1 个答案:

答案 0 :(得分:0)

该错误表示无法找到“LogFactory”类,这意味着您缺少JasperReports使用的commons-logging.jar。 对于模板,您可以在Detail中使用List(组件)或Table,并将其数据源设置为您要发送的列表($ P(“text”)或$ P {REPORT_DATA_SOURCE})。 此外,没有必要将列表作为参数或数据源发送。您可以将其作为参数发送(在某些情况下,更复杂的情况下 - 使用多个列表和表,是可行的方法)并将数据源设置为JREmptyDataSource,或将其作为数据源发送并从参数中删除,在你的情况下就足够了。