JasperReports是领先的java开源报表库。她将.jrxml编译为.jasper文件,她可以被转换为多种格式输出(PDF,CSV,XLS,HTML)。webwork action用来创建对象的list,而JasperReport Result用这个list来填充模版。
WW已经很好的集合了JasperReport,添加相应的java包,如bsh-2.0b4.jar,itext-1.3.1.jar,iTextAsian.jar,jasperreports-1.3.1.jar,poi-2.0-final-20040126.jar,commons-*.jar等包;新建action,
import com.opensymphony.webwork.ServletActionContext;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
public class JasperAction extends BaseAction {
private List myList;
public List getMyList() {
return myList;
}
public void setMyList(List myList) {
this.myList = myList;
}
private String format = "pdf";
private String WebDir = null;
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public String getWebDir() {
return WebDir;
}
// used only in during junit test
public void setWebDir(String webDir) {
WebDir = webDir;
}
public String execute() throws Exception {
myList = userManager.getUsers(null);
// Map parameters = new HashMap();
// String ctxPath = ServletActionContext.getServletContext().getRealPath("/");
// parameters.put("format", "pdf");
// if (WebDir != null){
// parameters.put("WEBDIR", WebDir);
// }
try{
// JasperCompileManager.compileReportToFile("/WEB-INF/reports/userList.jrxml","/WEB-INF/reports/userList.jasper");
// prepare report and data
InputStream is = ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/reports/userList.jrxml");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(myList);
// // generate pdf file
// JasperDesign jasperDesign = JRXmlLoader.load(is);
// JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
// JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds);
// JasperExportManager.exportReportToPdfFile(jasperPrint, ctxPath + "/resources/userList.pdf");
// addMessag("errors.detail", "file created: " + ctxPath + "/resources/userList.pdf");
}
catch(Exception e){
e.printStackTrace();
log.error(e);
return ERROR;
}
// if all goes well ..
return SUCCESS;
}
}
Jasper模版,JR使用一种特殊的XML页面定义模版,它会被编译为.jasper文件,这些模版可以用iReport来设计。
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="userList"
columnCount="1"
printOrder="Vertical"
orientation="Portrait"
pageWidth="595"
pageHeight="842"
columnWidth="535"
columnSpacing="0"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="NoPages"
isTitleNewPage="false"
isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<queryString language="hql"><![CDATA[from User]]></queryString>
<field name="lastName" class="java.lang.String"/>
<field name="firstName" class="java.lang.String"/>
<field name="username" class="java.lang.String"/>
<field name="address" class="com.boyi.common.model.Address"/>
<field name="address.country" class="java.lang.String"/>