iReport是用于定义JasperReport报表的可视化工具,JasperReport使用XML来定义一个报表的结构。
下载地址:http://www.jaspersoft.com/ir_opensource_download.html
下载iReport-3.0.0-windows-installer.exe,按提示执行默认安装。
使用jasperreport生成报表 (一)
/**
*
* @param docType
* 文档类型
* @param jasperPath
*/
Map params, Connection conn, String fileName)
IOException, ServletException {
servletExportHTML(jasperPath, params, conn, fileName);
}
JRAbstractExporter exporter = getJRExporter(docType);
// 获取后缀
String ext = docType.toString().toLowerCase();
fileName += "."
}
// 判断资源类型
// 要想获得更好的视觉效果,可以添加以下代码
exporter.setParameter(
JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE); // 删除记录最下面的空行
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
Boolean.FALSE); // 删除多余的ColumnHeader
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND
, Boolean.FALSE); // 显示边框
}
response.setContentType(getContentType(docType));
response.setHeader( "Content-Disposition"
+ URLEncoder.encode(fileName, "UTF-8"
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
getJasperPrint(jasperPath, params, conn));
OutputStream outStream =
PrintWriter outWriter =
response.setCharacterEncoding( "GBK"
outWriter = response.getWriter();
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,outWriter);
}
outStream = response.getOutputStream();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outStream);
exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,
exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT,
exporter.setParameter(JRTextExporterParameter.CHARACTER_ENCODING, "GBK"
}
}
exporter.exportReport();
}
}
outStream.close();
}
}
}
}
}
}
2.用Servlet导出生成文件
Java代码
String docType = request.getParameter( "docType"
String jasperFile = request.getParameter( "jasperFile"
String isBean = request.getParameter( "isBean"
String fileName =
//jasper文件放在应用根目录的reports中
String jasperPath = request.getSession().getServletContext().getRealPath( "/"
fileName = "报表"
}
ReportUtils jasperReport =
//传递报表中(SQL)用到的参数值:$P{ProjectName}
Map params =
//"Name"是报表中定义过的一个参数名称,其类型为String 型
//params.put("ProjectName", new String("Project1"));
jasperReport.servletExportDocument(getEnumDocType(docType), jasperPath, params, getSourceList(), fileName);
}
jasperReport.servletExportDocument(getEnumDocType(docType), jasperPath, params, getConnection(), fileName);
}
}
e.printStackTrace();
}
e.printStackTrace();
}
}
response.setCharacterEncoding( "UTF-8"
response.sendError(- 1
}
}
}
}
DocType type = DocType.HTML;
docType = docType.toUpperCase();
type = DocType.PDF;
}
type = DocType.XLS;
}
type = DocType.XML;
}
type = DocType.RTF;
}
type = DocType.CSV;
}
type = DocType.TXT;
}
}
/***数据对象****/
List<TUser> sourceList =
TUser user =
user.setId( 1000
user.setUsername( "user_"
user.setPassword( "*******"
sourceList.add(user);
}
}
/****数据库连接****/
Connection conn =
String driver = "com.mysql.jdbc.Driver"
String url = "jdbc:mysql://127.0.0.1/springapp?useUnicode=true&characterEncoding=gb2312"
Class.forName(driver);
conn = DriverManager.getConnection(url, "root"
}
e.printStackTrace();
}
ex.printStackTrace();
}
}
}
3.web.xml中的Servlet配置
Xml代码
com.logcd.servlet.JapserReportServlet
4.调用
Js代码
window.open(url);
}
/***获取当前路径***/
}
Html代码
报表类型
5.直接生成文件
Java代码
//将报表的定义文件HelloWorld.jrxml编译成HelloWorld.jasper文件
String jasperFile=JasperCompileManager.compileReportToFile(fileName);
//向HelloWorld.jasper文件中填充数据,这一步将生产出HelloWorld .jrprint文件
String jrprintFile=JasperFillManager.fillReportToFile(jasperFile,
//将.jrprint文件转换成HTML格式
JasperExportManager.exportReportToHtmlFile(jrprintFile);
//将.jrprint文件转换成PDF格式
//JasperExportManager.exportReportToPdfFile(jrprintFile);
//将.jrprint文件转换成XML格式
JasperExportManager.exportReportToXmlFile(jrprintFile,
//将.jrprint文件转换成XLS格式(即Excel文件),需要用到POI类库.
File sourceFile =
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile);
File destFile =
JRXlsExporter exporter =
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport();
System.out.println( "success with "
}
}
使用jasperreport生成报表 (二)
关键字: jasperreport
1.ReportUtils.java通用类
Java代码
/**
* 使用jasperReport做报表时的工具支持类.有两个用途,生成jasperPrint对象,和设置导出时的session
*/
}
/**
* 获得JasperPrint对象;自定义填充报表时的parameter和dataSource. 参数说明和动态表头的用法参考上一方法
*/
JRDataSource dataSource)
JasperReport jasperReport =
jasperReport = (JasperReport) JRLoader.loadObject(filePath);
dataSource);
}
e.printStackTrace();
}
}
/**
* 获得JasperPrint对象;自定义填充报表时的parameter和connection
*/
Connection conn)
JasperReport jasperReport =
jasperReport = (JasperReport) JRLoader.loadObject(filePath);
conn);
}
e.printStackTrace();
}
}
/**
* 通过传入List类型数据源获取JasperPrint实例
*/
List list)
JRDataSource dataSource =
}
/**
* 传入类型,获取输出器
*
* @param docType
* @return
*/
JRAbstractExporter exporter =
exporter =
exporter =
exporter =
exporter =
exporter =
exporter =
exporter =
}
}
/**
* 获得相应类型的Content type
* @param docType
* @return
*/
String contentType="text/html"
contentType = "application/pdf"
contentType = "application/vnd.ms-excel"
contentType = "text/xml"
contentType = "application/rtf"
contentType = "text/plain"
}
}
String report_type) {
session.setAttribute("REPORT_JASPERPRINT"
session.setAttribute("REPORT_FILENAME"
session.setAttribute("REPORT_TYPE"
}
/**
* 定义了报表输出类型,固定了可输出类型
*/
PDF, HTML, XLS, XML, RTF, CSV, TXT
}
/**
* 编译报表模板文件jrxml,生成jasper二进制文件
*
* @param jrxmlPath
* @param jrsperPath
* @throws JRException
*/
JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
}
/**
* 输出html静态页面,必须注入request和response
*
* @param jasperPath
* @param params
* @param sourceList
* @param imageUrl
* 报表文件使用的图片路径,比如 ../servlets/image?image=
* @throws JRException
* @throws IOException
* @throws ServletException
*/
List sourceList, String imageUrl)
ServletException {
response.setContentType("text/html"
response.setCharacterEncoding("UTF-8"
JRAbstractExporter exporter = getJRExporter(DocType.HTML);
JasperPrint jasperPrint = getPrintWithBeanList(jasperPath, params,
sourceList);
session.setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
PrintWriter out = response.getWriter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageUrl);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.FALSE);
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<br style='page-break-before:always;'>"
exporter.exportReport();
}
/**
* 输出html静态页面,必须注入request和response
*
* @param jasperPath
* @param params
* @param sourceList
* @param imageUrl
* 报表文件使用的图片路径,比如 ../servlets/image?image=
* @throws JRException
* @throws IOException
* @throws ServletException
*/
Connection conn, String imageUrl)
ServletException {
response.setContentType("text/html"
response.setCharacterEncoding("UTF-8"
JRAbstractExporter exporter = getJRExporter(DocType.HTML);
JasperPrint jasperPrint = getJasperPrint(jasperPath, params,
conn);
session.setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);
PrintWriter out = response.getWriter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageUrl);
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.FALSE);
exporter.exportReport();
}
/**
* 生成不同格式报表文档
*
* @param docType
* 文档类型
* @param jasperPath
*/
Map params, List sourceList, String fileName)
IOException, ServletException {
servletExportHTML(jasperPath, params, sourceList, fileName);
}
JRAbstractExporter exporter = getJRExporter(docType);
// 获取后缀
String ext = docType.toString().toLowerCase();
fileName += "."
}
// 判断资源类型
// 要想获得更好的视觉效果,可以添加以下代码
exporter.setParameter(
JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE); // 删除记录最下面的空行
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
Boolean.FALSE);// 删除多余的ColumnHeader
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND
, Boolean.FALSE);// 显示边框
}
response.setContentType(getContentType(docType));
response.setHeader("Content-Disposition"
+ URLEncoder.encode(fileName, "UTF-8"
exporter.setParameter(JRExporterParameter.JASPER_PRINT,
getPrintWithBeanList(jasperPath, params, sourceList));
OutputStream outStream =
PrintWriter outWriter =
response.setCharacterEncoding("GBK"
outWriter = response.getWriter();
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER,outWriter);
}
outStream = response.getOutputStream();
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outStream);
exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,
exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT,
exporter.setParameter(JRTextExporterParameter.CHARACTER_ENCODING,"GBK"
}
}
exporter.exportReport();
}
}
outStream.close();
}
}
}
}
}