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(",");
}
List<Object[]> projectList = getEntityManager().queryPrintProjectInfo(printValue);
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;
int fieldCount = 0;
int pnameCount = -1;
for
(int i = 0; i < printValue.length; i++) {
if
("pthrow".equals(printValue[i])) {
columCount = columCount + 2;
fieldCount = fieldCount + 2;
}
else
if
("ploan".equals(printValue[i])) {
columCount = columCount + 2;
fieldCount = fieldCount + 2;
}
else
if
("pname".equals(printValue[i])) {
pnameCount = i;
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();
JRDesignStyle theaderStyle = (JRDesignStyle) styleMap.get("theader");
JRDesignStyle tbodyStyle = (JRDesignStyle) styleMap.get("tboby");
JRDesignStyle tfootStyle = (JRDesignStyle) styleMap.get("tfoot");
int _START_X_ = 20;
int startX = _START_X_;
int columnWidth = 535 / fieldCount;
final
int columnHeadBandHeight = 20;
final
int detailHeight = 24;
final
int pagefootHeight = 15;
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);
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])) {
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("金额");
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;
}
}
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();
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");
JasperUtils.prepareReport(jasperReport, type);
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;
}