JasperReport簡介
JasperReport:java提供的一個類庫,承上啟下,讀取IReport生成的xxx.jrxml文件,獲取到pdf中需要顯示的全部內容,然后底層調用IText相關的方法,生成一個具體的PDF文檔
IReport: 圖形化報表開發工具(java swing編寫的一個可視化工具) --->xxx.jrxml
IText:java提供的一套用於生成PDF文檔的類庫編寫的代碼.
報表技術之PDF格式報表生成 (JasperResport)
1.JasperReport
IText PDF 類庫 , 編程非常復雜 ,運維成本非常高
2.IReport 圖形化報表開發工具 下載安裝
下載網址:
http://community.jaspersoft.com/project/ireport-designer/releases
注意:可能需要jdk1.7才能打開
3.IReport 報表模板簡介和設置中文生成
3.1. 新建 JasperReport 模板文件 .jrxml
3.2.設置中文, IReport 引入 ITextAsian.jar 中文包
3.3.了解報表模板結構
Title: 報表標題
PageHeader: 頁眉
ColumnHeader: 表格列標題
Detail: 表格數據內容
ColumnFooter: 表格頁腳
PageFooter: 頁腳
Summary: 摘要
3.4.常用報表組件
StaticText: 靜態文本
TextField : 顯示動態文本
3.5 設置預覽格式為 PDF
4.IReport 配置數據庫連接,基於數據表生成報表
4.1.點擊按鈕配置數據庫連接
新建JDBC連接
4.2 在 ireport 添加 oracle 的 jdbc 驅動
4.3 通過 ReportQuery 查詢數據庫 ,最后點擊ok
4.4.設計報表
5.JasperResport 根據模板文件 生成報表
5.1. 設置 ireport 字段 自動換行
5.2將桌面(文件路徑)的waybill.jrxml文件復制到項目中
5.3在頁面添加按鈕,並綁定點擊事件,提交表單
5.4在maven項目的父模塊添加jasperReport依賴
5.5 在 ReportAction 添加 exportJasperPdf 方法
問題:當項目的功能夠多時,可能會出現jar包沖突(當導入本次是jackson包沖突)
Caused by: java.lang.ClassNotFoundException:
com.fasterxml.jackson.annotation.ObjectIdResolver
在pom的坐標中引入
5.6.從數據導入只能顯示與數據庫匹配,但是如果要想導出我查詢后的結果,重新設計ireport報表:
根據java 符合實體類中的對象生成數據源.
重新添加實體類的對象,刪除原來的數據
重新在項目加入jrxml文件.
修改 ReportAction 代碼
異常:
Caused by: QueryPhaseExecutionException[Result window is too large, from + size must be less than or equal to: [10000] but was [2147483647]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level parameter.]
修復 WayBillServiceImpl 查詢數據代碼:
Action代碼

@Action("report_exportJasperPdf") public String exportJasperPdf() throws IOException, DocumentException, JRException, SQLException { // 查詢出 滿足當前條件 結果數據 List<WayBill> wayBills = wayBillService.findWayBills(model); // 下載導出 // 設置頭信息 ServletActionContext.getResponse().setContentType("application/pdf"); String filename = "運單數據.pdf"; //客戶端瀏覽器 String agent = ServletActionContext.getRequest() .getHeader("user-agent"); filename = FileUtils.encodeDownloadFilename(filename, agent); ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment;filename=" + filename); // 根據 jasperReport模板 生成pdf // 讀取模板文件 String jrxml = ServletActionContext.getServletContext().getRealPath( "/WEB-INF/jasper/waybill.jrxml"); JasperReport report = JasperCompileManager.compileReport(jrxml); // 設置模板數據 // Parameter變量, Map<String, Object> paramerters = new HashMap<String, Object>(); paramerters.put("company", "陝西朗朗"); // Field變量 JasperPrint jasperPrint = JasperFillManager.fillReport(report, paramerters, new JRBeanCollectionDataSource(wayBills)); System.out.println(wayBills); // 生成PDF客戶端 JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ServletActionContext.getResponse().getOutputStream()); exporter.exportReport();// 導出 ServletActionContext.getResponse().getOutputStream().close(); return NONE; }