報表筆記

常用的幾大報表技術:POI 、Itext、jasperreport技術,本篇以jasperreport爲例。

Jasperreport:

     jasperreport是一個強大的、靈活的報表生成工具,能夠展示豐富的頁面內容,並將之轉換成 PDF、HTML或者xml格式等。

該庫完全是由java編寫,可以用於各種java應用程序,包括javaee,web應用程序中生成動態內容。

   jasperreport是開源的,但是文檔是收費的,它還有一個開源的工程IRepoet,Ireport是一個圖形化的輔助工具,能彌補jasperreport的缺點,jasperreport僅提供了可使用的類庫。

IReport:

    iReport的刪除格式,支持PDF、HTML、CSV、java2d、Excel、純文字、JRViewer,其中最常用的是PDF、JRViewer

報表模板的結構:

    

Title:報表的標題,如有多頁只有一個標題

Page Header :每頁報表數據的頁頭

Cloumn Header:數據的列頭

Detail:顯示數據的內容

Column Footer:表格頁腳

PageFooter:頁腳

Summarg:摘要

常用的報表組件

    

Static Text :  靜態的文本

TextField :顯示動態的文本  

設置預覽的格式  -- PDF

   

Irerot :配置數據庫的連接,基於報表生成

     

1,字段的創建

  

點擊Next之後,進行鏈接那個數據庫

數據庫爲紅色表示沒有改驅動,需要加入該驅動

連接完成數據庫之後,然後可以直接對數據庫進行使用sql語句直接查詢

 

在使用sql語句查詢的時候,可以使用參數來傳遞條件表達式中的參數

select * from 表名 where = $P{PojectName} order by pronname

1,2方式二

   

右鍵創建

重命名:

  

創建完成之後,將創建的字段 添加到Datail 1中 此時會在Column Header中出現你要設置的對應的字段的名字

可以對指定的字段進行屬性的設置

1.3使用 javabean的形式創建Field

選擇的目錄是當前javabean所在的工程路徑下編譯後的class文件所在的目錄。

2.參數

通常是用來在打印的時候從程序裏的傳值到報表裏,也就是說參數通常的是其參數傳遞的作用,在使用的時候,一般是用來將數據放在map中設置key和value兩個參數,key就是對應的報表中的參數,參數的類型是java中的Object類型,所以可以傳遞任意的類型。

在使用參數的時候,格式是:$P{parameter name}

在程序中將參數傳遞到報表中:

1,創建一個Map集合,將要顯示的數據封裝到map集合中,如果是多個對象類型的,主要對象中的屬性值要跟報表中的參數的名稱一致,將對象放進map集合中即可

2,創建JaperFillManager.fillReport(fileName,hm,new JREmptyDataSource());方法

    fileName : 參數表示的是:根據報表模板生成的模板對象

    hm : 表示的map集合

    new JREmptyDataSource()  : 表示的數據源  -- 如果是對象顯示數據的時候,將查詢出的數據當參數傳遞(從數據庫中查詢的數據)

@RestController
public class Demo01 {
    @Autowired
    ServletContext context;
    @RequestMapping(value = "/hello")
    public void report() throws IOException, JRException {
        RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes attributes1 = (ServletRequestAttributes) attributes;
        HttpServletRequest request = attributes1.getRequest();
        HttpServletResponse response = attributes1.getResponse();
//        獲取全局參數
//        WebApplicationContext context =
//                ContextLoader.getCurrentWebApplicationContext();
//        ServletContext servletContext = context.getServletContext();
//        設置下載的類型
        response.setContentType("application/pdf");
//        獲取當前瀏覽器的類型
        String header = request.getHeader("user-agent");

//        設置頭信息,設置下載的中文亂碼的問題
        String s = FileUtils.encodeDownloadFilename("報表.pdf", header);
//       設置點擊下載的時候下載的文件名稱
        response.setHeader("Content-Disposition","attachmnet;filename"+s);
//        獲取IRrport的路徑 的全路徑
//        String realPath = context.getRealPath("ReportDemo/src/main/resources/jasper/report1.jrxml");
        String realPath = this.getClass().getClassLoader().getResource("jasper/Ieport.jrxml").toString();
        System.out.println(realPath);
//        根據給的IReport的模板,生成IRrport的對象
        JasperReport jasperReport = JasperCompileManager.compileReport(realPath);

        HashMap<String, Object> map = new HashMap<>();
        map.put("name","李四");
        map.put("age","20");
        map.put("sex","男");

//        將數據和地址綁定在一起    因爲爲沒有設置數據源,所以傳入null
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JRBeanCollectionDataSource(null));

        JRPdfExporter pdfExporter = new JRPdfExporter();
//        設置對象的輸出 格式爲PDF 的格式
        JRPdfExporter jrPdfExporter = new JRPdfExporter();
//        設置 數據
        jrPdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,null);
//         將結果放進流中,進行輸出
        jrPdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,response.getOutputStream());
//      執行導出
        jrPdfExporter.exportReport();
    }
}

常用的三個參數 (拿sql舉例):

select id ,count from a where id = idstr;(idstr表示傳遞的數據)

  $F{id}:即顯示以上sql查詢的id值   用於數據的顯示

  $P{idstr} :即顯示傳進來的參數值

  $V{sumCunt} 即求和的count 列的值,並顯示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章