報表技術之PDF格式報表生成 ----JasperResport


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;
    }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM