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