概要:在实际项目中,一般使用java对象作为数据源的方式更多,这种方式会更加灵活多变。与mvc结构更为契合。上面介绍了用JDBC数据源时,用到了Fields对象。本篇主要是使用Fileds对象来匹配JavaBean对象。
第一步:创建实体对象Bean,结构如下:
package com.zzg.entity; import java.util.Date; import com.zzg.common.core.model.BaseEntity; public class Column extends BaseEntity{ private String sid; private String name; private String type; private Integer length; private Integer decimal; private String required; private String primary; private String defaultValue; private String comment; private Date createDt; private String createBy; private Date updateDt; private String updateBy; private String busTableId; private Integer version; private String state; private String deleteFlag; private String code; private String desc; private static final long serialVersionUID = 1L; public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc == null ? null : sid.trim(); } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid == null ? null : sid.trim(); } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getType() { return type; } public void setType(String type) { this.type = type == null ? null : type.trim(); } public Integer getLength() { return length; } public void setLength(Integer length) { this.length = length; } public Integer getDecimal() { return decimal; } public void setDecimal(Integer decimal) { this.decimal = decimal; } public String getRequired() { return required; } public void setRequired(String required) { this.required = required == null ? null : required.trim(); } public String getPrimary() { return primary; } public void setPrimary(String primary) { this.primary = primary == null ? null : primary.trim(); } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue == null ? null : defaultValue.trim(); } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment == null ? null : comment.trim(); } public Date getCreateDt() { return createDt; } public void setCreateDt(Date createDt) { this.createDt = createDt; } public String getCreateBy() { return createBy; } public void setCreateBy(String createBy) { this.createBy = createBy == null ? null : createBy.trim(); } public Date getUpdateDt() { return updateDt; } public void setUpdateDt(Date updateDt) { this.updateDt = updateDt; } public String getUpdateBy() { return updateBy; } public void setUpdateBy(String updateBy) { this.updateBy = updateBy == null ? null : updateBy.trim(); } public String getBusTableId() { return busTableId; } public void setBusTableId(String busTableId) { this.busTableId = busTableId == null ? null : busTableId.trim(); } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public String getState() { return state; } public void setState(String state) { this.state = state == null ? null : state.trim(); } public String getDeleteFlag() { return deleteFlag; } public void setDeleteFlag(String deleteFlag) { this.deleteFlag = deleteFlag == null ? null : deleteFlag.trim(); } public String getCode() { return code; } public void setCode(String code) { this.code = code == null ? null : code.trim(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", sid=").append(sid); sb.append(", name=").append(name); sb.append(", type=").append(type); sb.append(", length=").append(length); sb.append(", decimal=").append(decimal); sb.append(", required=").append(required); sb.append(", primary=").append(primary); sb.append(", defaultValue=").append(defaultValue); sb.append(", comment=").append(comment); sb.append(", createDt=").append(createDt); sb.append(", createBy=").append(createBy); sb.append(", updateDt=").append(updateDt); sb.append(", updateBy=").append(updateBy); sb.append(", busTableId=").append(busTableId); sb.append(", version=").append(version); sb.append(", state=").append(state); sb.append(", deleteFlag=").append(deleteFlag); sb.append(", code=").append(code); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]"); return sb.toString(); } }按照Column 对象新建Fileds(注意数据类型一致),我这里仅仅编辑sid 和 name 属性。
去掉多余的band,只保留Title,Detail,PageFooter。
将Filed属性拖动到 Detail 1 Band
设置页码,打开组件面板 在Composite Elements栏找到Page Number 拖入到 Page Footer 中
二、通过SpringBoot程序,使用Bean作为数据源生成报表
核心代码:
package com.zzg.report; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import com.zzg.entity.Column; import net.sf.jasperreports.engine.JasperRunManager; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; @Controller @RequestMapping("/api/bean") public class BeanController { @RequestMapping("/{reportName}") public void getReportByParam(@PathVariable("reportName") final String reportName, HttpServletResponse response) { ServletOutputStream sosRef = null; // bean 连接获取 try { List<Column> list = new ArrayList<Column>(); for (int i = 1; i <= 100; i++) { Column column = new Column(); column.setSid("sid:" + i); column.setName("name is :" + i); list.add(column); } // 获取文件流 ClassPathResource resource = new ClassPathResource("jaspers" + File.separator + reportName + ".jasper"); InputStream jasperStream = resource.getInputStream(); sosRef = response.getOutputStream(); JasperRunManager.runReportToPdfStream(jasperStream, sosRef, null, new JRBeanCollectionDataSource(list)); response.setContentType("application/pdf"); } catch (Exception e) { e.printStackTrace(); } finally { try { sosRef.flush(); sosRef.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }pom.xml jar 包依赖:
<!-- 报表系统:JasperReports --> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.6.0</version> </dependency> <!-- 字体文件依赖--> <dependency> <groupId>com.zzg.report</groupId> <artifactId>font</artifactId> <version>1.0.0</version> </dependency>效果展示:
