一..首先采用iReport作报表,生成相应的XXX..jrxml 文件,具体操作可参考http://mooncome1983.blogchina.com/inc/iReport%23right.htm
二.采用Jasperreport在java中生成报表实例代码:
1
.不连接数据库时:
public
class
Test
...
{ /** */ /** * @param args */ public static void main(String[] args) ... { // TODO Auto-generated method stub ... { JasperReport jasperReport; JasperPrint jasperPrint; try ... { String temp = System.getProperty( " user.dir " ); // compile xxx.jrxml jasperReport = JasperCompileManager .compileReport(temp + " /WebRoot/WEB-INF/classes/reports/jasperreports_demo.jrxml " ); // 路径的问题 jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JREmptyDataSource()); // export pdf JasperExportManager.exportReportToPdfFile(jasperPrint, temp + " /WebRoot/WEB-INF/classes/reports/simple_report.pdf " ); // export html JasperExportManager.exportReportToHtmlFile(jasperPrint, temp + " /WebRoot/WEB-INF/classes/reports/simple_report.html " ); } catch (JRException e) ... { e.printStackTrace(); } } } }
2
:连接数据库:
public
class
Test
...
{ /** */ /** * @param args */ public static void main(String[] args) ... { // TODO Auto-generated method stub ... { JasperReport jasperReport; JasperPrint jasperPrint; try ... { String temp = System.getProperty( " user.dir " ); // 把.jrxml文件编译成.jasper文件,尽管也可直接访问的已生成的.jasper文件,不过不推荐这样做,毕竟是iReport使 // 用的JasperReport版本可能与我们在Java工程中包含的版本不一样,这样,直接使用iReport生成的.jasper文件可能会 // 在下一步的runReport中出问题。 jasperReport = JasperCompileManager .compileReport(temp + " /WebRoot/WEB-INF/classes/reports/test1.jrxml " ); // 路径的问题 // fillReport( , , ) 最后一个参数是取得数据连接 JasperPrint jasperPrint1 = JasperFillManager.fillReport(jasperReport, new HashMap(),getMysqlConn()); // export pdf JasperExportManager.exportReportToPdfFile(jasperPrint1, temp + " /WebRoot/WEB-INF/classes/reports/test1.pdf " ); // export html JasperExportManager.exportReportToHtmlFile(jasperPrint1, temp + " /WebRoot/WEB-INF/classes/reports/test1.html " ); } catch (JRException e) ... { e.printStackTrace(); } } } public static Connection getMysqlConn() ... { String url = " jdbc:mysql://localhost:3306/catalog " ; Connection dcon = null ; try ... { Class.forName( " com.mysql.jdbc.Driver " ); dcon = DriverManager.getConnection(url, " root " , " root " ); } catch (Exception e) ... { // TODO Auto-generated catch block e.printStackTrace(); } return dcon; } }
3
.采用servlet直接生成pdf等文件
public
class
TestServlet
extends
HttpServlet
...
{ public static final String XML_FILE_PATH = System.getProperty( " user.dir " ) + " /WebRoot/WEB-INF/classes/reports/ " ; protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException ... { // 创建response输出流,设置responxe回应的头部 OutputStream out = res.getOutputStream(); res.setContentType( " application/pdf " ); res.setHeader( " Content-Disposition " , " attachment; filename=test1.pdf " ); // filename为生成PDF的文件名 String fileName = " test1.jrxml " ; Map map = null ; // 调用createPdf()获得PDF输出的字节流并打印出来。 byte [] bytes = createPdf(fileName, map); res.setContentLength(bytes.length); out.write(bytes, 0 , bytes.length); out.flush(); } protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException ... { doGet(req, res); } // 封装创建PDF输出的compile和run方法,返回最终生成的字节流 private byte [] createPdf(String fileName, Map map) ... { String path = XML_FILE_PATH + fileName; // .jrxml文件的全路径 String jrFile = XML_FILE_PATH + " test1.jasper " ; // 编译结果.jasper文件的全路径 byte [] bytes = null ; try ... { JasperCompileManager.compileReportToFile(path, jrFile); // 将.jrxml文件编译成.jasper文件 } catch (JRException e) ... { e.printStackTrace(); } try ... { bytes = JasperRunManager.runReportToPdf(jrFile, map, getMysqlConn()); // 生成相应的的字节流 } catch (JRException e) ... { e.printStackTrace(); } return bytes; } public Connection getMysqlConn() ... { String url = " jdbc:mysql://localhost:3306/catalog " ; Connection dcon = null ; try ... { Class.forName( " com.mysql.jdbc.Driver " ); dcon = DriverManager.getConnection(url, " root " , " root " ); } catch (Exception e) ... { // TODO Auto-generated catch block try ... { dcon.close(); } catch (SQLException e1) ... { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } return dcon; } }