struts2筆記——整合JasperReports

JasperReports,Jasper .[dʒæspə]碧玉html

16.1 JasperReports簡介java

JasperReport是一個強大、靈活的報表生成工具,可以展現豐富的頁面內容,並將之轉換成Excel、PDF、HTML或者XML格式。這個工具是開源的,徹底使用java編寫。mysql

 

JasperReport由一份XML格式的報表設計文件開始,通過編譯、填充、導出或預覽,能夠產生多種格式的報表文件。除此以外,它還提供了一個iPeport的開發工具,該工具能以所見即所得的方式來開發報表定義文件。spring

 

使用JasperReports開發報表的核心工做就是編輯一個報表設計文件。這個文件可使用手工方式編輯,這種方式效率低下,也可使用iReport。sql

 

16.1.1下載和安裝JasperReport數據庫

到官方站點:http://jasperreports.sourceforge.net下載(目前站點改成http://jasperforge.org/了,讀者注)。下載解壓後在dist文件夾內找到它的API文檔和JAR包apache

 

下載其餘開源項目框架

JasperReports框架生成一些格式的文檔可能依賴另一些開源項目,例如生PDF文檔依賴於iTest項目;生成Excel文件則依賴POI項目。eclipse

 

16.1.2 JasperReports初探jsp

以開發一個靜態報表爲例。

首先把jasperReports JAR包複製到工程的lib中

1、定義一個報表設計文件(.jrxml)

包含大量的JasperReports標籤,可使用iReport工具生成,讀者不要花太多時間在這份文件上

二、把報表設計文件編譯成報表文件(.jasper)

    public static void main(String[] args)throws JRException {

       JasperCompileManager

           .compileReportToFile("static.jrxml","static.jasper");

       System.out.println("成功編譯成JasperReport文件(*.jasper)");

    }

三、填充數據(.jsprint)

    public static void main(String[] args)throws JRException {

       JasperFillManager

           .fillReportToFile("static.jasper", nullnew  

                          JREmptyDataSource());//使用空參數,空的數據源

       System.out.println("成功填充了一個報表文件(.jrprint)");

  }

.jsprint文件已是一個能夠顯示的報表了,可是這份報表是格式無關的,它既能夠生成PDF格式,也能夠生成Excel格式

四、瀏覽報表

JasperReports使用JRViewer類瀏覽報表,這個類繼承了java裏的Jpanel.

public static void main(String[] args)throws JRException {

       JRViewer jrv=new JRViewer("static.jrprint",false);

       //C/S結構使用Jframe來裝載JRViewer。B/S則使用Applet來裝載

       JFrame jf=new JFrame("報表預覽");

       jf.add(jrv);

       jf.pack();

       jf.setVisible(true);

    }

五、導出Excel文檔

這時要POI項目支持,下載網址:http://poi.apache.org/

    public static void main(String[] args)throws JRException {

       JasperPrint print=(JasperPrint)JRLoader

               .loadObject("static.jrprint");

       //excel文件導出器

       JRXlsExporter exporter=new JRXlsExporter();

       //導出的目標文件

       exporter.setParameter(JRExporterParameter.JASPER_PRINT,                   print);

       //設置每張報表都寫在不一樣的文件裏

        exporter.setParameter(JRXlsExporterParameter

              .IS_ONE_PAGE_PER_SHEETtrue);

       exporter.exportReport();

       System.out.println("成功建立了一個excel文檔");

    }

除了JRXlsExporter導出器外,JasperReports還提供了以下文件導出器

JRCsvExporter:用於導出CSV格式文件

JRHtmlExporter:導出HTML文件

JRPdfExporter:導出PDF文件

JRRtfExporter:導出RTF格式文件

JRTextExporter:導出文本文件

JRXmlExport:導出XML格式文件

除此以外,JasperReports還提供了一個導出管理器:JasperExportManager,能夠將JasperPrint文件導出成HTML、PDF、XML格式的報表文件(沒有excel格式)。還提供了一個運行管理器:JasperRunManager,只能夠導出HTMl和PDF格式的文件

六、導出成PDF文件

須要iText項目支持,下載網點:http://itextpdf.com/

    public static void main(String[] args) throws JRException{

       JasperExportManager

           .exportReportToPdfFile("static.jrprint","static.pdf");

       System.out.println("成功建立一個PDF文件");

    }

 

16.1.3JasperReports的開發流程

1、定義報表設計文件(.jrxml)

2、使用JasperCompileManager編譯.jrxml文件成.jasper文件

三、使用JasperFillManager工具填充.jasper文件成.jrprint文件

四、使用導出管理器JasperExportManager或各類格式的文件導出器(JRXxxExport)或JasperRunManager將.jrprint文件導出成各類格式。也可使用JRViewer直接瀏覽報表

 

16.1.4解決PDF報表的中文問題

在報表設計文件中(.jrxml)有中文字符的地方設置中文字符所用的PDF編碼,以及PDF字體。

在文件內容前增長如下元素:

<textElement>

    <font pdfFontName=」STSong-Light」 pdfEncoding=」UniGB-UCS2-H」/>

</textElemtnt>

也能夠在文件中定義style對象,如

<style pdfFontName=」STSong-Light」 pdfEncoding=」UNIGB-UCS2-H」/>

 

16.2動態報表

1、定義報表設計文件(.jrxml)

能夠在設計報表時使用<parameter>元素定義一些傳入參數,如:

<parameter name=」book3」 isForPrompting=」false」

       class=」java.lang.String」/>

定義以後,可使用$P{book3}輸出參數內容

二、編譯,同上

三、填充

經過Map對象傳入,如

Map<String, String> params=new HashMap<String, String>();

params.put("author", "李剛");

params.put("book1", "spring2.0寶典");

JasperFillManager.fillReportToFile("static.jasper", params,

       new JREmptyDataSource());

四、瀏覽或導出文件,同上

 

16.2.2帶查詢的的報表

即系統的報表顯示來自數據庫裏的數據。

一、  定義報表設計文件

<!--定義一個參數 -->

<parameter name=」id」 isForPrompting=」true」 class=」java.lang.Integer」/>

isForPrompting:表示輸入參數是不是用於查詢語句

<!--定義查詢 -->

<queryString><![CDATA[select * from bool_table where book_id>$P{id}]]/>

<!--將查詢的字段定義成Field -->

<field name=」book_id」 class=」java.lang.Integer」/>

<!--輸出book_id的Field -->

$F{book_id}

 

建立報表設計文件時引用動態數據的方式

a、$V{variablesName}:訪問變量

b、$P(parameterName):訪問參數,參數經過Map對象填充

c、$F{fieldsName}:訪問字段,經過查詢數據庫返回

 

二、  編譯,同上

三、  填充

public static void main(String[] args)throws Exception {

       Map<String, String> params=new HashMap<String, String>();

       params.put("id", "1");

       JasperFillManager.fillReportToFile("simpleQuery.jasper",

           params, QueryFill.getConnection());

       System.out.println("成功填充了一個報表文件(.jrprint)");

    }

   

    private static Connection getConnection()throws     

           ClassNotFoundException,SQLException{

       String driver="com.mysql.jdbc.Driver";

       String url="jdbc:mysql://localhost/jee";

       String user="root";

       String password="123";

       Class.forName(driver);

       Connection conn=DriverManager

           .getConnection(url,user,password);

       return conn;

    }

 

16.3使用iReport設計報表

iReport是一個所見即所得工具,能夠快速地編輯出精美的報表設計文件(.jrxml)

 

16.3.1下載和安裝iReport

下載網站:http://jasperforge.org/ (官方已有中文版的)

 

16.3.2使用iReport

以帶條件查詢的報表設計文件爲例,iReport的版本是3.7.1,版本不一樣菜單會有所不一樣

1、文件->new…->Report 新建文件.

2、創建數據庫鏈接

把數據庫驅動程序複製到iReport的lib路徑下,重啓iReport.(3.7版本已經有Mysql驅動,在目錄iReport-3.7.1\ide10\modules\ext下)

點擊」Report Datasources 」工具按鈕,再new一個新的數據庫鏈接,如圖:

 struts2筆記——整合JasperReports

三、編寫SQL查詢語句

點擊struts2筆記——整合JasperReports,出現如下對話框,寫入SQL語句。

struts2筆記——整合JasperReports
 

若是SQL語句沒有錯誤,會查詢出表單字段,單擊OK,iReport會自動添加Fields。

4、設計報表佈局

在Report Elements中選擇元素添加到.jrxml,再把Fields元素拉到合格的位置。設計好.jrxml後,就可使用上面介紹的步驟生成須要格式的文檔

 

16.4安裝JasperReports插件

struts2項目中有這個插件,myeclipse 8中也有,名稱爲

struts2-jasperreports-plugin-x.jar,能夠到http://struts.apache.org/下載

使用解壓縮軟件打開其中的struts-plugin.xml文件,發現

<package name="jasperreports-default" >沒有擴展原有的struts-default,李剛老師已經向struts2項目組反映(在struts2.1.8版中,已經發現插件配置文件擴展了extends="struts-default")

 

16.5使用JasperReports報表

16.5.1建立生成報表的Action

生成報表的Action和大部struts2的Action同樣,但該Action使用List封裝大量VO(value object,也就是要在頁面顯示的javaBean)

1、VO

public class Book {

    private int id;

    private String name;

    private String author;

    public int getId() {

       return id;

    }

    public Book(int id,String name,String author){

       this.id=id;

       this.name=name;

       this.author=author;

    }

}

2、Action

public class JasperAction extends ActionSupport {

    public List getBookList(){

       List<Book> result=new ArrayList<Book>();

       result.add(new Book(1,"Spring2寶典","李剛"));

       result.add(new Book(2,"輕量級J2EE企業應用實戰","李剛"));

       result.add(new Book(3,"基於J2EE的Ajax寶典","李剛"));

       return result;

    }

}

16.5.2配置生成JasperReports報表的Action

須要增長一個類型爲jasper類型的Result,故應該讓該Action所在包繼承jasperreports default包。定義jasper類型的Result時,須要配置如下3個屬性:

1、 location:指定報表設計文件(.jasper)的位置

2、 format:指定生成報表文件的格式,如HTMl、PDF

3、 dataSource:指定一個集合屬性名,讓報表自動迭代輸出該集合中的VO對象

<package name="lee" extends="jasperreports-default">

    <action name="export"

              class="com.rain.shop.jasperreports.JasperAction">

       <result name="sucess" type="jasper">

           <param name="location">jasper\sample_report.jasper</param>

           <param name="format">PDF</param>

           <param name="dataSource">bookList</param>

       </result>

    </action>

</package>

 

16.5.3生成JasperReport報表

通過上面步驟,只要提供系統所需的報表設計文件便可,這個文件可使用iReport工具設計。按照上面VO的設計,在報表設計文件中增長3個字段,如:

<field name=」id」 class=」java.lang.Integer」/>

能夠直接在iReport添加,如:

struts2筆記——整合JasperReports

有了field,就能夠在iReport上設計它們的位置和樣式。

最後向export.action發送請求,將會得到一份PDF文檔。系統會下載一份文件,後綴是

action。若是但願讓系統自動使用該報表文件的後綴是pdf,應該在Struts2攔截請求後綴中增長pdf,而後直接向export.pdf請求,將獲得一份名爲export.pdf文件。

相關文章
相關標籤/搜索