public void beforeDisplayReportDataPerRow( ReportRequest rrequest, ReportBean rbean, RowDataBean rowDataBean) { if (rowDataBean.getRowindex() < 0) { // 当前正在显示标题部分 /** 下面在数据标题行前面插入一行动态的标题行 */ String insertedHtml = "<tr><td colspan='" + rowDataBean.getColspans() + "' align='center' bgcolor='#dddddd'><font size='3'><b>动态插入的报表标题行</b></font></td></tr>"; rowDataBean.setInsertDisplayRowHtml(insertedHtml); } else if (rowDataBean.getRowindex() == Integer.MAX_VALUE) { // 当前是显示完最后一行记录后的调用 String insertedHtml = "<tr>"; for (int i = 0; i < rowDataBean.getColspans(); i++) { System.out.println(i + "|||" + ((ColBean) rowDataBean.getLstColBeans().get(i))); insertedHtml += "<td align='center' bgcolor='#dddddd'><font size='3'><b>" + ((ColBean) rowDataBean.getLstColBeans().get(i)).getLabel(rrequest) + "</b></font></td>"; } insertedHtml += "</tr>"; rowDataBean.setInsertDisplayRowHtml(insertedHtml); } else { // 显示数据行 AbsReportType reportTypeObj = rrequest.getDisplayReportTypeObj(rbean.getId()); List<AbsReportDataPojo> lstData = reportTypeObj.getLstReportData(); // 所有报表数据的容器 if (lstData.size() > 0) { // 报表有数据 Object dataObj = lstData.get(rowDataBean.getRowindex()); // 取到即将显示记录的数据对象 String currentSex = (String) rowDataBean.getColData("sex"); // 取到当前记录的性别列 currentSex = currentSex == null ? "" : currentSex.trim(); String displayedsex = reportTypeObj.getReportRequest().getStringAttribute("DISPLAYED_SEX"); // 上一条记录显示的性别 if (displayedsex == null || !displayedsex.equals( currentSex)) { // 如果还没有显示记录,或者当前正要显示的记录的性别和上一条不是同一个性别,则说明开始显示新的性别的记录(这是因为查询报表的SQL语句中已经按性别排了序) reportTypeObj .getReportRequest() .setAttribute("DISPLAYED_SEX", currentSex); // 存下当前记录显示的性别,以便后面显示其它记录时比较 int[] tmp = getRecordCntAndTotalAges(reportTypeObj, lstData, currentSex); float avgage = 0; if (tmp[0] > 0) avgage = tmp[1] / tmp[0]; StringBuffer insertedHtmlBuf = new StringBuffer(); insertedHtmlBuf.append( "<tr><td colspan='" + rowDataBean.getColspans() + "' align='center' bgcolor='#eeeeee'>"); insertedHtmlBuf.append("<font size='3'><b>" + currentSex + "性员工列表</b></font>"); insertedHtmlBuf.append(" 【记录数:" + tmp[0] + ";平均年龄" + avgage + "】"); insertedHtmlBuf.append("</td></tr>"); rowDataBean.setInsertDisplayRowHtml(insertedHtmlBuf.toString()); } } } }
/** 当报表没有配置PDF模板时,此方法在显示完每页PDF后执行 现在在此方法中演示显示完每页后向其中添加一个图片 */ public void afterDisplayPdfPageWithoutTemplate(Document document, AbsReportType reportTypeObj) { super.afterDisplayPdfPageWithoutTemplate(document, reportTypeObj); ReportRequest rrequest = reportTypeObj.getReportRequest(); String serverName = rrequest.getRequest().getServerName(); String serverPort = String.valueOf(rrequest.getRequest().getServerPort()); String imgurl = "http://" + serverName + ":" + serverPort + Config.webroot + "wabacusdemo/pdftemplate/logo.gif"; // 构造要添加图片的URL try { Image img = Image.getInstance(imgurl); float width = document.getPageSize().getWidth(); float height = document.getPageSize().getHeight(); // width = width - img.getWidth(); img.setAbsolutePosition(width / 2, height / 2 + 300f); img.setAlignment(Image.ALIGN_CENTER); document.add(img); } catch (Exception e) { e.printStackTrace(); } }