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