flexReport 使用問題解決。

    最近在學習flex,準備將手上的項目使用flex製作。

項目中需要對打印進行預覽,網上搜索,找到一個flexReport的開源組件。

看了一下例子發現還是蠻不錯的,就象看pdf一樣。

但是比較鬱悶的是竟然不提供包下載,只能下載源文件進行編譯。。千辛萬苦把環境搭建好,進行實際應用。

源文件裏面只提供 頁頭,頁尾,文本,表格的封裝組件(其實就是說明遇到分頁該怎麼辦)。實際上不使用封裝組件也是可以預覽的,但是只能在第一頁顯示,高度不夠就悲劇(隱藏,別想會到下一分頁)。出現分頁後遇到未封裝的組件就會異常。

 

因爲我需要在報表中插入多張圖片文字說明,1頁肯定不夠。

好了,這下沒法子了,本着不修改源碼,也實現也個封裝圖片的實現每個頁面都可以出現圖片的功能。

封裝代碼很容易,但是問題不只有這點,更厲害的來了。

遇到的問題有:

   1.圖片只能出現在第1頁,如果想使用文本將它擠到第二頁,就會出現異常,原因是你沒有判斷分頁方法。

   2.分頁錯亂,有些頁面是還剩下大半空白就已經分頁。

   3.組件重複,如果你上一頁的情況出現1的問題,那麼恭喜你,這一頁會重複該組件。

   4.一頁中能使用一個文本組件,不然會出現異常,原因是第一個文本佔據了全部高度(不管你的內容是多少),到第二個的時候就認爲要進行分頁,但是很悲劇的出現索引-1。。

總的四個問題,確實可以令人崩潰。還好有源碼在手上,不然真的要仆街。經過調試調試再調試終於找到了問題所在點跟解決辦法。

萬惡之源就在此:

     1.第一頁的生成:位置爲Body.render() . 一看就清楚了,如果提供了判斷分頁的方法那就好說了.沒提供的話就出現問題1的前部分了.

    

      

解決辦法:

        1.圖片的問題比較簡單,因爲沒提供判斷分頁的方法.只需實現方法 validNextPage. 還沒完,圖片不能顯示的給 height 賦值.因爲這樣會增加畫布的高度,又會出現新的問題。

        這是本人使用的方法,可以參考一下。使用一個屬性代替height,在佈局時height的高度設置爲0。當然你可以修改源碼。

       

     

    

   1+2+3.分頁的生成:位置爲Body.nextPage().整個代碼的意思是:上一頁的最後一個組件是否(是否提供分頁方法)會造成分頁,如果分頁就一切正常,如果沒分頁的話就會出現問題3(組件重複).下一句:新的組件佔滿整個高度, 就造成問題2了。最後就會出現問題1後面的問題了。

     
   

    解決辦法:將else if(!displayed(childInstance))中的語句修改爲

  

   解決了問題2,3。 問題就是修改下一句else if (childInstance.validNextPage) 。

 

  4.這個是因爲組件本身的高度判斷有問題,當實際高度跟擁有的高度出現不同的時候這個問題就會產生。

  將條件 if(super.height==value)  改爲  if(super.height<=value) 因爲可以解決(純屬估計,未測試).當然也可以使用其它方法避免出現這種情況。例如:使用多個文本組件合成一個,將文本設置成一頁的最後一個組件。 

 

好了,寫了這麼多希望能給看這文章的人一些幫助。

最後如果哪位有比較好點、完整點的版本希望能共享出來。

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