這篇文章將為大家詳細(xì)講解有關(guān)怎么在Java中使用jasperReport對(duì)動(dòng)態(tài)列進(jìn)行打印,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

示例代碼:
public ActionResult projectPrint() {
String[] printValue = null;
// 從頁面中獲得要查詢的字段
String reqPrintValue = getRequest().getParameter("printValue");
// 沒有選擇則默認(rèn)全打印
if (null == reqPrintValue || StringUtils.isEmpty(reqPrintValue)) {
printValue = new String[] { "pnumber", "pname", "pdepart", "pdecision", "pthrow", "plastmonth", "pfund", "ploan" };
} else {
printValue = reqPrintValue.split(",");
}
// 查詢統(tǒng)計(jì)數(shù)據(jù)
List<Object[]> projectList = getEntityManager().queryPrintProjectInfo(printValue);
// 將數(shù)據(jù)轉(zhuǎn)換為Map對(duì)象,換化成Map對(duì)象
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ù)(因?yàn)閜name比較長所以想讓pname比其它的列長些,故設(shè)計(jì)這個(gè)變量)
int pnameCount = -1;// 記錄下pname的序號(hào)
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的序號(hào)
columCount = columCount + 1;
fieldCount = fieldCount + 2;
} else {
// 其它的列都占一個(gè)單位
columCount = columCount + 1;
fieldCount = fieldCount + 1;
}
}
InputStream is = null;
try {
// 從資源文件中讀取報(bào)表
is = this.getClass().getResourceAsStream("/reports/project.jrxml");
JasperDesign jasperDesign = (JasperDesign) JRXmlLoader.load(is);
Map styleMap = jasperDesign.getStylesMap();
// column header 對(duì)應(yīng)的樣式
JRDesignStyle theaderStyle = (JRDesignStyle) styleMap.get("theader");
// column detail 對(duì)應(yīng)的樣式
JRDesignStyle tbodyStyle = (JRDesignStyle) styleMap.get("tboby");
// pagefoot 對(duì)應(yīng)的樣式
JRDesignStyle tfootStyle = (JRDesignStyle) styleMap.get("tfoot");
int _START_X_ = 20;// x軸的起始位置
int startX = _START_X_; // x軸的起始位置
// 單列的寬度
// 535是jasepreReport報(bào)表column大的寬度
int columnWidth = 535 / fieldCount;
// 20,24,15是報(bào)表中已設(shè)置的,一定與之相同
final int columnHeadBandHeight = 20;
final int detailHeight = 24;
final int pagefootHeight = 15;
// 設(shè)置報(bào)表字段
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("序號(hào)");
columnHeadBand.addElement(staticText);
startX += columnWidth;
} else if ("pname".equals(printValue[idx])) {
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setStyle(theaderStyle);
// 項(xiàng)目名稱的寬度是其它的寬度的2倍
staticText.setWidth(columnWidth * 2);
staticText.setY(0);
staticText.setX(startX);
staticText.setHeight(2 * columnHeadBandHeight);
staticText.setText("項(xiàng)目名稱");
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])) {
// 投審會(huì)下面有兩列
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setStyle(theaderStyle);
staticText.setWidth(columnWidth * 2);
staticText.setY(0);
staticText.setX(startX);
staticText.setHeight(columnHeadBandHeight);
staticText.setText("投審會(huì)");
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])) {
// 投決會(huì)下面有一列
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setStyle(theaderStyle);
staticText.setWidth(columnWidth);
staticText.setY(0);
staticText.setX(startX);
staticText.setHeight(columnHeadBandHeight);
staticText.setText("投決會(huì)");
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();
// 合計(jì)數(shù)據(jù),本應(yīng)統(tǒng)計(jì)的
List<Object[]> pageCountList = new ArrayList<Object[]>();
Object[] obj = new String[] { "合計(jì)", "15299", "", "", "67121", "92420", "155877", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "XXX小計(jì)", "", "24473", "16470", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "WWW小計(jì)", "", "7289", "1674", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "ZZZ小計(jì)", "", "32700", "13000", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "YYY小計(jì)", "", "12733", "120733", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "AAA小計(jì)", "", "2225", "120733", };
pageCountList.add(obj);
obj = new String[] { "", "", "", "BBB小計(jì)", "", "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);
}
}
// 編譯報(bào)表
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
String type = this.getRequest().getParameter("type");//pdf格式
JasperUtils.prepareReport(jasperReport, type);
// 報(bào)表數(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;
}
本文標(biāo)題:怎么在Java中使用jasperReport對(duì)動(dòng)態(tài)列進(jìn)行打印-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://chinadenli.net/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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容