這篇文章將為大家詳細講解有關(guān)怎么在Java中使用jasperReport對動態(tài)列進行打印,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)潁州免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。示例代碼:
public ActionResult projectPrint() { String[] printValue = null; // 從頁面中獲得要查詢的字段 String reqPrintValue = getRequest().getParameter("printValue"); // 沒有選擇則默認全打印 if (null == reqPrintValue || StringUtils.isEmpty(reqPrintValue)) { printValue = new String[] { "pnumber", "pname", "pdepart", "pdecision", "pthrow", "plastmonth", "pfund", "ploan" }; } else { printValue = reqPrintValue.split(","); } // 查詢統(tǒng)計數(shù)據(jù) List<Object[]> projectList = getEntityManager().queryPrintProjectInfo(printValue); // 將數(shù)據(jù)轉(zhuǎn)換為Map對象,換化成Map對象 List<Map> reportDataList = new ArrayList<Map>(); for (int i = 0; i < projectList.size(); i++) { Object[] personStr = projectList.get(i); Map reportData = new HashMap(); for (int j = 0; j < personStr.length; j++) { reportData.put("field_" + j, String.valueOf(personStr[j])); } reportDataList.add(reportData); } int columCount = 0;// 數(shù)據(jù)列 int fieldCount = 0;// 字段列數(shù)(因為pname比較長所以想讓pname比其它的列長些,故設(shè)計這個變量) int pnameCount = -1;// 記錄下pname的序號 for (int i = 0; i < printValue.length; i++) { // pthrow下面有兩列 if ("pthrow".equals(printValue[i])) { columCount = columCount + 2; fieldCount = fieldCount + 2; // ploan下面也有兩列 } else if ("ploan".equals(printValue[i])) { columCount = columCount + 2; fieldCount = fieldCount + 2; // 故意讓pname也占兩列 } else if ("pname".equals(printValue[i])) { pnameCount = i;// 記錄下pname的序號 columCount = columCount + 1; fieldCount = fieldCount + 2; } else { // 其它的列都占一個單位 columCount = columCount + 1; fieldCount = fieldCount + 1; } } InputStream is = null; try { // 從資源文件中讀取報表 is = this.getClass().getResourceAsStream("/reports/project.jrxml"); JasperDesign jasperDesign = (JasperDesign) JRXmlLoader.load(is); Map styleMap = jasperDesign.getStylesMap(); // column header 對應(yīng)的樣式 JRDesignStyle theaderStyle = (JRDesignStyle) styleMap.get("theader"); // column detail 對應(yīng)的樣式 JRDesignStyle tbodyStyle = (JRDesignStyle) styleMap.get("tboby"); // pagefoot 對應(yīng)的樣式 JRDesignStyle tfootStyle = (JRDesignStyle) styleMap.get("tfoot"); int _START_X_ = 20;// x軸的起始位置 int startX = _START_X_; // x軸的起始位置 // 單列的寬度 // 535是jasepreReport報表column大的寬度 int columnWidth = 535 / fieldCount; // 20,24,15是報表中已設(shè)置的,一定與之相同 final int columnHeadBandHeight = 20; final int detailHeight = 24; final int pagefootHeight = 15; // 設(shè)置報表字段 for (int idx = 0; idx < columCount; idx++) { JRDesignField field = new JRDesignField(); field.setName("field_" + idx); field.setValueClass(java.lang.String.class); jasperDesign.addField(field); } JRDesignBand columnHeadBand = (JRDesignBand) jasperDesign.getColumnHeader(); // 繪制表頭 for (int idx = 0; idx < printValue.length; idx++) { if ("pnumber".equals(printValue[idx])) { JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth); staticText.setY(0); staticText.setX(startX); staticText.setHeight(2 * columnHeadBandHeight); staticText.setText("序號"); columnHeadBand.addElement(staticText); startX += columnWidth; } else if ("pname".equals(printValue[idx])) { JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); // 項目名稱的寬度是其它的寬度的2倍 staticText.setWidth(columnWidth * 2); staticText.setY(0); staticText.setX(startX); staticText.setHeight(2 * columnHeadBandHeight); staticText.setText("項目名稱"); columnHeadBand.addElement(staticText); startX += columnWidth * 2; } else if ("pdepart".equals(printValue[idx])) { JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth); staticText.setY(0); staticText.setX(startX); staticText.setHeight(2 * columnHeadBandHeight); staticText.setText("部門"); columnHeadBand.addElement(staticText); startX += columnWidth; } else if ("pdecision".equals(printValue[idx])) { JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth); staticText.setY(0); staticText.setX(startX); staticText.setHeight(2 * columnHeadBandHeight); staticText.setText("已決策"); columnHeadBand.addElement(staticText); startX += columnWidth; } else if ("pthrow".equals(printValue[idx])) { // 投審會下面有兩列 JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth * 2); staticText.setY(0); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("投審會"); columnHeadBand.addElement(staticText); staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); columnHeadBand.addElement(staticText); staticText.setWidth(columnWidth); staticText.setY(columnHeadBandHeight); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("12月初"); staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); columnHeadBand.addElement(staticText); staticText.setWidth(columnWidth); staticText.setY(columnHeadBandHeight); staticText.setX(startX + columnWidth); staticText.setHeight(columnHeadBandHeight); staticText.setText("12月中"); columnHeadBand.addElement(staticText); startX += 2 * columnWidth; } else if ("plastmonth".equals(printValue[idx])) { // 投決會下面有一列 JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth); staticText.setY(0); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("投決會"); columnHeadBand.addElement(staticText); staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); columnHeadBand.addElement(staticText); staticText.setWidth(columnWidth); staticText.setY(columnHeadBandHeight); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("12月下"); columnHeadBand.addElement(staticText); startX += columnWidth; } else if ("pfund".equals(printValue[idx])) { JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth); staticText.setY(0); staticText.setX(startX); staticText.setHeight(2 * columnHeadBandHeight); staticText.setText("基金投資額"); columnHeadBand.addElement(staticText); startX += columnWidth; } else if ("ploan".equals(printValue[idx])) { // 投貸協(xié)同額下面有兩列 JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); staticText.setWidth(columnWidth * 2); staticText.setY(0); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("投貸協(xié)同額"); columnHeadBand.addElement(staticText); staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); columnHeadBand.addElement(staticText); staticText.setWidth(columnWidth); staticText.setY(columnHeadBandHeight); staticText.setX(startX); staticText.setHeight(columnHeadBandHeight); staticText.setText("金額"); staticText = new JRDesignStaticText(); staticText.setStyle(theaderStyle); columnHeadBand.addElement(staticText); staticText.setWidth(columnWidth); staticText.setY(columnHeadBandHeight); staticText.setX(startX + columnWidth); staticText.setHeight(columnHeadBandHeight); staticText.setText("入庫情況"); columnHeadBand.addElement(staticText); startX += 2 * columnWidth; } } // 繪制Detail部門 startX = _START_X_; JRDesignBand columnDetailBand = (JRDesignBand) jasperDesign.getDetail(); for (int idx = 0; idx < columCount; idx++) { JRDesignTextField textField = new JRDesignTextField(); textField.setStretchWithOverflow(true); textField.setX(startX); textField.setY(0); if (pnameCount == idx) { textField.setWidth(2 * columnWidth); startX += 2 * columnWidth; } else { textField.setWidth(columnWidth); startX += columnWidth; } textField.setHeight(detailHeight); textField.setPositionType(JRElement.POSITION_TYPE_FLOAT); textField.setStyle(tbodyStyle); textField.setBlankWhenNull(true); JRDesignExpression expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("$F{field_" + idx + "}"); textField.setExpression(expression); columnDetailBand.addElement(textField); } JRDesignBand pageFootBand = (JRDesignBand) jasperDesign.getPageFooter(); // 合計數(shù)據(jù),本應(yīng)統(tǒng)計的 List<Object[]> pageCountList = new ArrayList<Object[]>(); Object[] obj = new String[] { "合計", "15299", "", "", "67121", "92420", "155877", }; pageCountList.add(obj); obj = new String[] { "", "", "", "XXX小計", "", "24473", "16470", }; pageCountList.add(obj); obj = new String[] { "", "", "", "WWW小計", "", "7289", "1674", }; pageCountList.add(obj); obj = new String[] { "", "", "", "ZZZ小計", "", "32700", "13000", }; pageCountList.add(obj); obj = new String[] { "", "", "", "YYY小計", "", "12733", "120733", }; pageCountList.add(obj); obj = new String[] { "", "", "", "AAA小計", "", "2225", "120733", }; pageCountList.add(obj); obj = new String[] { "", "", "", "BBB小計", "", "3000", "0", }; pageCountList.add(obj); int footWidth = 535 / 7; for (int p = 0; p < pageCountList.size(); p++) { for (int k = 0; k < 7; k++) { Object[] ob = pageCountList.get(p); JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setStyle(tfootStyle); staticText.setWidth(footWidth); staticText.setY(pagefootHeight * p); staticText.setX(k * footWidth + _START_X_); staticText.setHeight(pagefootHeight); staticText.setText(String.valueOf(ob[k])); pageFootBand.addElement(staticText); } } // 編譯報表 JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); String type = this.getRequest().getParameter("type");//pdf格式 JasperUtils.prepareReport(jasperReport, type); // 報表數(shù)據(jù)源 JRDataSource dataSource = new JRBeanCollectionDataSource(reportDataList); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, dataSource); HttpServletResponse response = this.getResponse(); JasperUtils.export(jasperPrint, response, getRequest(), type); } catch (Exception e) { e.printStackTrace(); } return null; }
本文標題:怎么在Java中使用jasperReport對動態(tài)列進行打印-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.muchs.cn/article0/shcio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站營銷、定制網(wǎng)站、全網(wǎng)營銷推廣、ChatGPT、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容