# JasperResport 報表系統
## JasperReport 基礎概念:
1. jrxml文件: 該文件定義了一個報表的基礎布局,布局預覽如下:

**報表標題區**:相當于整個報告的標題,在整個文檔中只出現一次
**當前頁頭/腳**:相當于word中的頁頭頁腳
**列頭/腳**:表格中的列頭和列腳
**匯總區**: 出現在整個文檔的結尾,用于匯總合計
**Background**: 用于設置報表水印
**Detail區**: Japser 會遍歷設置的數據源中的每條數據,顯示相應字段的值。
不同的區域對應xml源文件中的不同節點,默認報表中有如下節點:

每一個報表都有一個默認的主數據源和多個子數據源、多個參數、
多個變量:
2. 報表組件: Jasper提供了許多有用的組件來包裹不同的內容:

3. Springboot集成Jasper:
a. 添加依賴 解決中文字體問題

第二個依賴是Japser要使用的字體。由于字體版權問題,這個包中包含的字體有限,
如果使用中文,就會出錯,這時候就需要通過接口添加字體文件。
首先在 C://windows/font 文件夾里找到相關的字體文件 (*.ttf格式) 放到 resources下面新建文件夾 jasper/font 中(可以自定義),再添加font.xml 內容如下:
```
~~~
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="msyh">
<normal>jasper/font/msyh.ttf</normal>
<bold>jasper/font/msyh.ttf</bold>
<italic>jasper/font/msyh.ttf</italic>
<boldItalic>jasper/font/msyh.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'msyh', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'msyh', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
~~~
```
注意這里給字體命名為 msyh ,這個命名要跟 jasper studio中的字體名字一樣。
然后新建配置文件`jasperreports_extension.properties`內容如下: 要注意這里配置的路徑要與實際目錄一致!
```
~~~
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.msyh=jasper/font/fonts.xml
~~~
```
項目代碼里配置完成后,需要在jasper studio中也安裝相關的字體,定義要注意這里的字體名字要去上面的一致! 點擊 windonws-> prefrence 搜索font即可。如下圖

b. 向報表模板傳遞值:
這里的操作跟MVC非常相似! 但是也非常簡單:關鍵代碼如下

兩個關鍵函數:一個重要概念:
~~~
JasperCompileManager.compileReport () 用于編譯Jrxml模板
~~~
~~~
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(tableMergeCols)); 用于向模板傳遞參數和數據源!
一個模板只能有一個主數據源,但是可以有多個參數:子報表也是一種參數,子數據源也是一種參數
~~~
最終報表效果如下:
