iReport學習筆記


概述

主要介紹如何根據jasper報表和數據生成pdf文檔,中文字體問題的解決方案和日期時間的格式化輸出。

iReport版本:5.2.0

生成pdf文檔

maven依賴

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>5.2.0</version>
</dependency>

完整的依賴樹:

[INFO] +- net.sf.jasperreports:jasperreports:jar:5.2.0:compile
[INFO] |  +- commons-beanutils:commons-beanutils:jar:1.8.0:compile
[INFO] |  +- commons-digester:commons-digester:jar:2.1:compile
[INFO] |  +- com.lowagie:itext:jar:2.1.7.js2:compile
[INFO] |  |  +- bouncycastle:bcmail-jdk14:jar:138:compile
[INFO] |  |  +- bouncycastle:bcprov-jdk14:jar:138:compile
[INFO] |  |  \- org.bouncycastle:bctsp-jdk14:jar:1.38:compile
[INFO] |  |     +- org.bouncycastle:bcprov-jdk14:jar:1.38:compile
[INFO] |  |     \- org.bouncycastle:bcmail-jdk14:jar:1.38:compile
[INFO] |  +- jfree:jcommon:jar:1.0.15:compile
[INFO] |  +- jfree:jfreechart:jar:1.0.12:compile
[INFO] |  +- xml-apis:xml-apis:jar:1.3.02:compile
[INFO] |  +- eclipse:jdtcore:jar:3.1.0:compile
[INFO] |  +- org.codehaus.castor:castor:jar:1.2:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.0.5:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.0.5:compile
[INFO] |  \- com.fasterxml.jackson.core:jackson-annotations:jar:2.0.5:compile
[INFO] \- sinobest:font-song:jar:1.0:compile

其中,font-song jar是自制的字體jar包,下載地址:http://pan.baidu.com/s/1NzMkm

基於sql的數據

1. 配置數據源

config-ds

2. 配置SQL

config-sql 

每一個結果字段作為一個Field。

3. 在程序中獲取文檔內容

public void test() throws JRException, IOException, SQLException {
    InputStream is = Main.class.getClassLoader().getResourceAsStream("reports/XZFYSQS-query.jasper");
    Map<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("SQD_SYSID", "4028ca9850d19ccb0150d19cd1ae0000");
    
    Connection conn = ...;
    byte[] datas = JasperRunManager.runReportToPdf(is, parameters, conn);
    conn.close();
}

基於JavaBean的數據

1. 新建JavaBean

package cn.sinobest.jzpt.fzywgz.reports.pojo;

public class XZFYSQS_RY {
    private java.lang.String SQR;
    private java.lang.String XB;
    private java.sql.Timestamp CSNY;
    ......
}

2. 在iReport中添加編譯路徑

add-class

3. 在iReport中加入Field

add-field

4. 在程序中獲取文檔內容

public void test() throws JRException, IOException {
    InputStream is = Main.class.getClassLoader()
            .getResourceAsStream(reports/XZFYSQS-javabean.jasper);

    List<XZFYSQS_RY> ryList = new ArrayList<XZFYSQS_RY>();
    ryList.add(...);

    JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(
            ryList);
    byte[] datas = JasperRunManager.runReportToPdf(is, null, dataSource);
    ...
}

中文字體解決方案

在編程時根據模板生成pdf內容時,可能出現中文打印不出來的問題;解決方案如下:

  1. 加入字體jar包:font-song
    http://pan.baidu.com/s/1NzMkm
  2. 中文字體,使用宋體、仿宋、方正小標宋簡體
  3. 設置中文組件的屬性
    set-encoding
    simsun.ttf來自於font-song.jar
  4. 糾正模板名稱
    我曾以XZFYSQS_RY.jrxml命名,編譯之后得XZFYSQS_RY.jasper,打印不出中文
    以XZFYSQS-RY.jrxml命名,編譯之后得XZFYSQS-RY.jasper,可以打印中文
    以XZFYSQS_01.jrxml命名,編譯之后得XZFYSQS_01.jasper,可以打印中文

日期時間格式化輸出

選中TextField - 右鍵 - Field pattern

time-pattern

對於日期類型,MM則始終顯示2位月份,M則根據需要顯示1或2位;其他域類推。


免責聲明!

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



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