一、前言
在工作中,尤其是傳統企業中,面不了會用到報表(包含圖表,子報表,交叉表等的複雜佈局)展示數據。學習JasperReport,是因爲經歷了GRID++報表開發的痛苦(尤其是IE兼容性問題極其嚴重)、不順手。
二、eclipse集成
TIBCO Jaspersoft Studio是JasperReports庫和JasperReports服務器的基於Eclipse的報表設計器;雖然,它挺好的;只是,開發人員已經習慣了現有電腦的eclipse(或idea),爲了開發效率,它可以作爲Eclipse插件使用(主要原因是我喜歡eclipse DevStyle主題 ^_^)。
eclipse > Help > Eclipse Marketplace
三、主界面和報表設計視圖
學習參考:https://blog.csdn.net/deniro_li/article/details/73610105
- 編輯器
頁籤 | 說明 |
Design | 可視化的報表設計區域。 |
Source | 報表對應的 JRXML 源代碼。 |
Preview | 預覽報表設計的效果。 |
- 輔助視圖
視圖 | 說明 |
Repository Explorer | 維護報表的數據來源。 |
Project Explorer | 維護項目目錄(當前的 workspace 下)。 |
Outline | 本張報表的結構,在預覽模式下,爲空。 |
Properties | 查看或者編輯某個報表元素的屬性,可以打開多個元素的屬性視圖。 |
Problems | 展示問題或者錯誤。 |
Report state summary | 報表執行控制檯、錯誤日誌、統計信息。 |
- Design
我們一般在 Design 頁籤中設計報表。報表分爲幾個不同的水平分割部分,它們都被叫做欄(Band),可以把這些報表元素放在這些欄中。每一個欄根據它們的特性,可能會被重複多次。比如 頁頭(page header)在每一頁都會被重複一次,而 detail band 中的內容,在每一條記錄中都會被重複一次。
因爲佈局是可視化的,所以幾乎可以忽略它們底層的源代碼(JRXML)。
Design 頁籤預先定義了 9 個欄。一個欄的寬度與頁面的寬度相同(不包括左右外邊距)。一般來說,欄 的高度會自動適配實際內容,但有的欄是固定的,比如 Column footer、page footer 以及最後一頁的 last page footer 的欄。
下面是欄的類型:
Band 名稱 | 說明 |
Title | 標題。它只會出現一次,可以被打印在一個獨立的頁中做封面(這種情況下,這個欄的高度不會被計算到所有欄的總高度中)。 |
Page Header | 頁頭。它會出現在所有的被打印的頁面中(如果 Tile 和 Summary 被打印在獨立頁中的話,那麼就不會打印頁頭)。 |
Column Header | 每一頁的數據頂部欄。一般放數據表中的列名。 |
Group Header | 分組的頂部欄。可選或者可以有多個。一般與 Group footer 配合使用。可以設置它的最小高度,但如果它的實際高度超過了這個最小值,那麼它就會被打印到新頁上,這一點一定要注意! |
Group Footer | 分組的底部欄。 |
Column Footer | 每一頁的數據底部欄。 |
Page Footer | 頁尾。 |
Last Page Footer | 最後一頁的頁尾。可以通過它設計一個與其他頁的頁尾與衆不同的效果。如果它的高度被設置爲 0,那麼它將被完全忽略。 |
Summary | 摘要欄。一般放置彙總的統計數據。 |
Background | 背景。可以在這裏加水印。它可以被設置的最大高度是頁面的高度。 |
Detail | 顯示數據,如:Fields變量 |
- JasperReport列出以下可選的尺寸格式:
頁面格式 | 尺寸(像素) | 頁面格式 | 尺寸(像素) |
Letter | 612x792 | B0 | 2836x4008 |
Note | 540x720 | B1 | 2004x2836 |
Legal | 612x1008 | B2 | 1418x2004 |
A0 | 2380x3368 | B3 | 1002x1418 |
A1 | 1684x3368 | B4 | 709x1002 |
A2 | 1190x1684 | B5 | 501x709 |
A3 | 842x1190 | ARCH_E | 2592x3456 |
A4 | 595x842 | ARCH_D | 1728x2593 |
A5 | 421x595 | ARCH_C | 1296x1728 |
A6 | 297x421 | ARCH_B | 864x1296 |
A7 | 210x297 | ARCH_A | 648x864 |
A8 | 148x210 | FLSA | 612x936 |
A9 | 105X148 | FLSE | 612x936 |
A10 | 74X105 | HALFLETTER | 396x612 |
11X17 | 792x1224 | LEDGER | 1224x792 |
四、報表元素
學習參考:https://blog.csdn.net/deniro_li/article/details/77850188
- 基礎元素
五、spring boot 集成
採用 spring-boot 1.5.14.RELEASE
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.9.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.9.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>6.9.0</version>
</dependency>
六、解決中文顯示
網上有替換字體的、有更換 jar 包的,一一使用都不完美。後來發現了此文章(感謝他):http://www.itclj.com/blog/5a0b079d81c06e4103ef5129 ,使用之後真不錯!終於,解決了中文顯示的難題。
jasperreport 源碼
我使用的是:華文宋體;fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="華文宋體">
<normal>fonts/STSONG.TTF</normal>
<bold>fonts/STSONG.TTF</bold>
<italic>fonts/STSONG.TTF</italic>
<boldItalic>fonts/STSONG.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'華文宋體', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'華文宋體', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
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.lobstertwo=fonts/fonts.xml
STSONG.TTF 字體下載,可以去 WIN10 控制面板 COPY。
預覽效果:
七、參考文獻
- http://www.itclj.com/blog/5a0b079d81c06e4103ef5129
- https://blog.csdn.net/SHIYUN123zw/column/info/31009
- https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v750/getting-started-jaspersoft-studio
- http://www.bubuko.com/infodetail-2492974.html
八、下期預告
- map填充報表;javaBean填充報表
- 展示分組報表