@常興
可以嘗試一下把pagebreak放到主報表去,放在子報表之間。
@DDR
一般來說是子報表的高度超了而導(dǎo)致的問題,不過你描述的不是很清楚,要不你把截圖發(fā)我郵箱,讓我看看吧
re: 今夜,我終于翻越了你,G-F-W Heis 2010-01-12 21:19
@會跑的蝸牛
今日還上youtube了:-)真不好意思。
re: 今夜,我終于翻越了你,G-F-W Heis 2010-01-12 21:18
@隔葉黃鶯
哈哈,是比不上你啦。我是比較晚,你比較早泄露了天機(jī)。
@大衛(wèi)
雖然jdk5以后反射性能有了很大的提升,但是反射性能肯定會差一點。通常情況下,如果可以通過getter和setter訪問,盡量使用getter和setter,這樣重構(gòu)起來也簡單。
@liguangjun
邊框是自己設(shè)置的;
字段是靜態(tài)添加的,不是動態(tài),所以要自己設(shè)計;
@梁章坪
不好意思,我借來的紙質(zhì)書。不過你可以關(guān)注我的博客,我覺得直接看筆記會比看書有效率很多。
@cici
不用子報表是會有問題的,估計是你的數(shù)據(jù)源配置錯誤。
@zhenlu
這與博文的主題沒關(guān),這可能要找一些支持RTF文件操作的代碼看看咯。
@5452
在技術(shù)領(lǐng)域有統(tǒng)一的術(shù)語是非常重要的,當(dāng)然術(shù)語背后的原理更為重要。
@zl
每一行對應(yīng)一個按鈕來打單?這個我不是很明白,我們郵件聯(lián)系吧。畢竟評論不是留言版。我郵箱:heisun@yeah.net
@zl
1.檢查你的子報表,field是否放在detail區(qū)域內(nèi)。
2.檢查父報表的subreport元素內(nèi)的XPATH是否是/NameList/Person
3.你的XML數(shù)據(jù)源不會只有一條數(shù)據(jù)吧?
如果還發(fā)現(xiàn)錯誤,下載我的模板源代碼對比一下。
@sky ao
精辟!
我個人認(rèn)為很多技術(shù)問題不是只了解結(jié)論就行了。
@zl
首先確認(rèn)你的xml文件沒有錯,文件編碼注意要是UTF8;
如果沒錯,這可能是ireport的xml解析器bug,我也經(jīng)常遇到這樣的問題。你可以試一下先把原來的ireport的xml數(shù)據(jù)源刪掉,然后重啟ireport,再試著新建一個xml數(shù)據(jù)源。這個bug也困擾我很久,有時候會莫名奇妙地不能解析。
@銀河使者
1.這道題目沒有說字符就一定是ASCII字符;
2.用256的數(shù)組來保存次數(shù)難免會造成空間的浪費。
@sun
打印之前肯定是可以修改的,我猜你的意思是打印預(yù)覽的階段對報表進(jìn)行修改吧?
從Jasperreport的生成報表原理上來看,有這樣一個過程。
1.模板設(shè)計階段。這是一個XML文件,以jrxml后綴名結(jié)尾。
2.編譯階段。通過編譯jrxml文件得到一個jasper文件。
3.數(shù)據(jù)填充階段。通過將數(shù)據(jù)源填充到j(luò)asper文件上,然后生成一個jrprint文件。jrprint可以轉(zhuǎn)換為PDF,Excel等格式的報表。jrprint文件已經(jīng)是填充了數(shù)據(jù)的報表,不能編輯內(nèi)容了。
所以要做到修改,有兩個方法:
一是修改數(shù)據(jù)源,你需要將數(shù)據(jù)源轉(zhuǎn)為可編輯的形式,例如XML數(shù)據(jù)源,像javaBean或數(shù)據(jù)庫類型的數(shù)據(jù)源就無能為力了。
二是,打印預(yù)覽階段將導(dǎo)出可編輯的文件,例如像HTML,然后提供HTML的編輯器,修改后可以打印。
我個人推薦第一種方法。因為可以將報表導(dǎo)為各種形式的文件,雖然需要工作量比較多。第二種方法就只能綁定在一種報表格式上了。
@nesta
1.可以,在屬性-字體 里面有一個垂直居中的選項。
2.你可以嘗試在subreport屬性當(dāng)中配置一個合適的數(shù)據(jù)源,像net.sf.jasperreports.engine.data.JRBeanArrayDataSource(Object[])或者net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Collection)。你可以去查一下API,但是這個解決方法的思路有問題,你為什么不統(tǒng)一數(shù)據(jù)源,這樣可以更好地處理問題。還有你的bean是通過參數(shù)傳入,還是設(shè)想在報表里構(gòu)造?
3.Jasperreport的參數(shù)傳遞是通過在subreport里設(shè)置傳遞的參數(shù)名,例如為ParamA,然后你再在子模板里新建一個相同名稱的參數(shù)ParamA,就可以獲取到這個參數(shù)的值了。
@sun
報表的數(shù)據(jù)是依賴數(shù)據(jù)源的,修改數(shù)據(jù)源自然能修改報表內(nèi)容。
@凌晨風(fēng)
“分成兩列橫著打印”是不是指像我現(xiàn)在的報表逆時針轉(zhuǎn)90度。如果是,那在Jasperreport里是做不到的。文章中也有提及,Jasperreport是只能一個區(qū)域(band)一個區(qū)域地去渲染,因為區(qū)域的排列是由上到下,所以渲染的順序也是從上到下的,沒辦法從左到右渲染。
@john
那你的意思是適合中國的報表才有意義?那什么是中國式的報表呢?
@凌晨風(fēng)
首先,針對你說的“報表做起來很麻煩”。我前面的文章有說過,以XML作為數(shù)據(jù)源是針對不同的需求的,請考慮下面的幾種情況:如果你的報表數(shù)據(jù)要經(jīng)過一系列的精確計算,然后在報表上展示計算結(jié)果;如果你的報表數(shù)據(jù)并不是全部都來自于數(shù)據(jù)庫,而是某些來自程序或其他配置文件;SQL能不能解決問題?
其次,我不能認(rèn)同“多個子報表效率無疑會很底”這句話。標(biāo)簽式報表主體報表的subreport元素都是指向相同的子報表模板。這相當(dāng)于java中一個類調(diào)用同一個類的多個實例,這樣并不會有效率問題。使用“無疑”這個詞并不是程序員應(yīng)有的素質(zhì),至少你應(yīng)該先去運行一下這個報表。
我猜想你說的“多結(jié)果集”是指subdatasets,這個是只適用于連接(Connection)類型的數(shù)據(jù)集(像數(shù)據(jù)庫,Hibernate之類),并不適用于數(shù)據(jù)源(Data Source)類型的數(shù)據(jù)集(像XML,CSV之類)。
對于你的“分欄”操作,我并不是很理解,請賜教。
@tide
我理解你的意思是像下面這樣的表格嗎?
_______________
| |____|____|
| |____|____|
| |____|____|
| |____|____|
如果是,我會在下一篇文章中介紹。
@游上岸的魚
使用XML作為數(shù)據(jù)源比直接讀取數(shù)據(jù)庫更有優(yōu)勢的地方在于:
1.數(shù)據(jù)可以在程序里處理;
2.數(shù)據(jù)獨立性和可讀性好
但是劣勢也是很明顯的,因為要從數(shù)據(jù)庫讀取數(shù)據(jù)到對象,對象再轉(zhuǎn)換為XML,這個過程消耗的資源要更多,效率也會受到影響。具體的效率我也沒測試過,但是我在項目里生成的XML在一萬行左右時,效率是可以接受的。
但是對于效率要求比較高的報表,但是數(shù)據(jù)不需要做中間處理的報表,我并不推薦XML作為數(shù)據(jù)源這種方式。