<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Heis的Blog

    保持簡單,保持愚蠢
    隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0
    數(shù)據(jù)加載中……

    JasperReport那些事兒(五)——再說表格式報表

         上一篇文章就有人評論說Jasperreport不適合中國式報表。我就很奇怪了,我從來沒說Jasperreport適合中國式報表(當然我也沒說不適合)。我寫文章的初衷就是分享技術,工具這種東西向來是以需求為導向的,合適就用,不合適沒錢買好的,也湊合用用。但是程序員往往是沒權去決定那些事兒的,程序員應該是一群能用有限的資源去解決問題的人,何況開源產(chǎn)品使用成本和學習成本都比較低,不用白不用。要一些人看著刺眼或打著打廣告的心態(tài),我就勸你別看,方正我是會繼續(xù)寫下去的。扯遠了,回到正題吧。
        最近博客留言有問怎么做“單元格合并的報表”,單看這定義,無從下手啊,我也不知道我理解的意思對不對,上星期做了一個我理解的“單元格合并的報表,希望和那位留言的博友的意思有一點重合就好了。看一下效果吧。

        數(shù)據(jù)源結構:
    <?xml version="1.0" encoding="utf-8" ?>
      
    <DepartmentList>
        
    <list>
          
    <Department>
            
    <name>行政部</name>
            
    <personList>
              
    <person>
                
    <age>35</age>
                
    <gender></gender>
                
    <name>張三</name>
              
    </person>
            
    </personList>
          
    </Department>
          
    <Department>
            
    <name>技術部</name>
            
    <personList>
              
    <person>
                
    <age>30</age>
                
    <gender></gender>
                
    <name>李四</name>
              
    </person>
              
    <person>
                
    <age>28</age>
                
    <gender></gender>
                
    <name>王五</name>
              
    </person>
            
    </personList>
          
    </Department>
        
    </list>
      
    </DepartmentList>

        都說中國的報表是大表中有小表,這其實和關系數(shù)據(jù)庫的表格概念有很大的不同。關系數(shù)據(jù)庫的表格是簡單的二維表格,不會在表格里再嵌套表格。那遇到這類型的表格應該怎么處理呢?我在前面的文章有講怎么制作簡單的二維表格,所以這篇主要是解決表格前面的單元格合并的問題。
        這里還要借助子報表,子報表是Jasperreport最為強大的功能,也是最具擴展性的功能組件(純粹個人意見)。
        做這樣的表格我是用了三個報表模板。
        第一個,DepartmentList.jrxml.(編譯后為jasper后綴名)

        第二個,DepartmentList_department.jrxml.

        第三個,DepartmentList_department_person.jrxml.

        調用關系是第一個模板調用第二個,第二個模板再調用第三個。
     DepartmentList.jasper.
        |-DepartmentList_department.jasper.
            |-DepartmentList_department_person.jasper.

        在第二個報表給子報表傳遞數(shù)據(jù)源時,表達式要像下面這樣寫。這樣寫主要目的是選擇當前department節(jié)點下的所有person節(jié)點
    ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/DepartmentList/list/Department["+$V{REPORT_COUNT}.intValue()+"]/personList/person")
        REPORT_COUNT變量是指當前detail band內的計數(shù)器。例如,從父報表傳過來的數(shù)據(jù)源的節(jié)點數(shù)是3,則REPORT_COUNT會從1到3遍歷,detail band也會渲染3次。這里的XPATH是遍歷了第一個到第三個Department下的所有person節(jié)點。

        這里值得一提的是在第二張報表的部門那個textfield里有個屬性需要注意,Stretch Type設置為"relative to band height",就是讓textfield自動往下延伸,延伸到與其所在的區(qū)域(band)相同的高度。

        說句實話,在Jasperreport里面處理表格的確是一件很麻煩的事(指以XML為數(shù)據(jù)源),像上文提到的表格是很簡單的例子,但是卻要用到三個模板。而且Jasperreport報表是線性渲染(由上到下),所以無論從靈活性和還是效率來說,都比不上像Excel那種以表格為導向類型的報表工具。但是還是那句話,工具這種東西向來是以需求為導向的,合適就用,不合適沒錢買好的,也湊合用用。
         報表模板及數(shù)據(jù)源點這里下載。

    程序員的一生其實可短暫了,這電腦一開一關,一天過去了,嚎;電腦一開不關,那就成服務器了,嚎……

    posted on 2009-03-16 22:40 Heis 閱讀(6231) 評論(9)  編輯  收藏 所屬分類: JasperReport那些事兒

    評論

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   

    非常感謝 終于找到這篇文章了
    2010-03-17 16:32 | guoxhvip

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   

    你好,我在本地上跑起來了你的例子,確實很好很強大,現(xiàn)在我的數(shù)據(jù)庫里有倆張表,父子關系的表,想做出跟你一樣的顯示效果,但是沒成功,顯示的很亂,主要是子報表顯示的很亂,我對子報表的<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>是這樣設置的,下面是數(shù)據(jù)庫腳本和jrxml文件,麻煩你幫我改正一下,謝謝
    create table BAREA
    (
    AREAID VARCHAR2(32) not null,
    AREANAME VARCHAR2(10),
    AREACODE VARCHAR2(10)
    )
    tablespace SAQ
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
    initial 64K
    minextents 1
    maxextents unlimited
    );
    alter table BAREA
    add constraint AREAID primary key (AREAID)
    using index
    tablespace SAQ
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
    initial 64K
    minextents 1
    maxextents unlimited
    );

    create table BCOMPANY
    (
    BCOMID VARCHAR2(32) not null,
    BCOMNAME VARCHAR2(32),
    BCOMADD VARCHAR2(32),
    BCOMTEL VARCHAR2(16),
    AREAID VARCHAR2(32)
    )
    tablespace SAQ
    pctfree 10
    initrans 1
    maxtrans 255
    storage
    (
    initial 64K
    minextents 1
    maxextents unlimited
    );
    alter table BCOMPANY
    add constraint BCID primary key (BCOMID)
    using index
    tablespace SAQ
    pctfree 10
    initrans 2
    maxtrans 255
    storage
    (
    initial 64K
    minextents 1
    maxextents unlimited
    );

    commit;


    insert into BAREA (AREAID, AREANAME, AREACODE)
    values ('ae111111', '北京', 'bj0001');
    insert into BAREA (AREAID, AREANAME, AREACODE)
    values ('ae222222', '上海', 'sh0001');
    insert into BAREA (AREAID, AREANAME, AREACODE)
    values ('ae333333', '廣州', 'gz0001');
    insert into BAREA (AREAID, AREANAME, AREACODE)
    values ('ae444444', '天津', 'tj0001');
    commit;

    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp555555', '廣州白云書店', '白云區(qū)', '56234567', 'ae333333');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp111111', '北京同學書社', '海淀區(qū)', '89760009', 'ae111111');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp222222', '上海學友書店', '浦東區(qū)', '78987666', 'ae222222');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp333333', '上海三聯(lián)圖書館', '寧杭區(qū)', '56789123', 'ae222222');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp444444', '天津成章書店', '塘沽區(qū)', '67432134', 'ae444444');
    commit;
    2010-03-18 19:47 | DDR

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   


    order_two_company.jrxml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"" target="_new" rel="nofollow">http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="order_two_company" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[]]></defaultValueExpression>
    </parameter>
    <queryString>
    <![CDATA[select * from barea]]>
    </queryString>
    <field name="AREAID" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="AREANAME" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="AREACODE" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <background>
    <band splitType="Stretch"/>
    </background>
    <title>
    <band splitType="Stretch"/>
    </title>
    <pageHeader>
    <band splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
    <band height="26" splitType="Stretch">
    <staticText>
    <reportElement x="164" y="0" width="100" height="26"/>
    <box>
    <pen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <topPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <leftPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    </box>
    <textElement textAlignment="Center">
    <font fontName="PMingLiU" pdfFontName="PMINGLIU.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
    </textElement>
    <text><![CDATA[地區(qū)f]]></text>
    </staticText>
    <staticText>
    <reportElement x="264" y="0" width="100" height="26"/>
    <box>
    <pen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <topPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <leftPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    </box>
    <textElement textAlignment="Center">
    <font fontName="PMingLiU" pdfFontName="PMINGLIU.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
    </textElement>
    <text><![CDATA[公司]]></text>
    </staticText>
    <staticText>
    <reportElement x="364" y="0" width="100" height="26"/>
    <textElement/>
    <text><![CDATA[電話]]></text>
    </staticText>
    </band>
    </columnHeader>
    <detail>
    <band height="25" splitType="Stretch">
    <textField>
    <reportElement stretchType="RelativeToBandHeight" x="164" y="0" width="100" height="25"/>
    <box>
    <pen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <topPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <leftPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    </box>
    <textElement textAlignment="Center" verticalAlignment="Middle">
    <font fontName="PMingLiU" pdfFontName="PMINGLIU.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
    </textElement>
    <textFieldExpression class="java.lang.String"><![CDATA[$F{AREANAME}]]></textFieldExpression>
    </textField>
    <subreport>
    <reportElement x="264" y="0" width="200" height="25"/>
    <subreportParameter name="p_areaid">
    <subreportParameterExpression><![CDATA[$F{AREAID}]]></subreportParameterExpression>
    </subreportParameter>
    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
    <subreportExpression class="java.lang.String"><![CDATA["D:\\ireportxml\\order_sub_area.jasper"]]></subreportExpression>
    </subreport>
    </band>
    </detail>
    <columnFooter>
    <band splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
    <band splitType="Stretch"/>
    </pageFooter>
    <summary>
    <band splitType="Stretch"/>
    </summary>
    </jasperReport>
    2010-03-18 19:49 | DDR

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   


    order_sub_area.jrxml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"" target="_new" rel="nofollow">http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="order_sub_area" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="p_areaid" class="java.lang.String"/>
    <queryString>
    <![CDATA[select t.*, t.rowid from bcompany t where t.areaid =$P{p_areaid}]]>
    </queryString>
    <field name="BCOMID" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="BCOMNAME" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="BCOMADD" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="BCOMTEL" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="AREAID" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <field name="ROWID" class="oracle.sql.ROWID">
    <fieldDescription><![CDATA[]]></fieldDescription>
    </field>
    <background>
    <band splitType="Stretch"/>
    </background>
    <title>
    <band splitType="Stretch"/>
    </title>
    <pageHeader>
    <band splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
    <band splitType="Stretch"/>
    </columnHeader>
    <detail>
    <band height="25" splitType="Stretch">
    <textField>
    <reportElement stretchType="RelativeToBandHeight" isPrintRepeatedValues="false" x="0" y="0" width="100" height="25"/>
    <box>
    <pen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <topPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <leftPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <bottomPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    <rightPen lineWidth="0.25" lineStyle="Solid" lineColor="#000000"/>
    </box>
    <textElement textAlignment="Center" verticalAlignment="Middle" rotation="None" lineSpacing="Single">
    <font fontName="PMingLiU" pdfFontName="PMINGLIU.ttf" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
    </textElement>
    <textFieldExpression class="java.lang.String"><![CDATA[$F{BCOMNAME}]]></textFieldExpression>
    </textField>
    </band>
    </detail>
    <columnFooter>
    <band splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
    <band splitType="Stretch"/>
    </pageFooter>
    <summary>
    <band splitType="Stretch"/>
    </summary>
    </jasperReport>
    2010-03-18 19:50 | DDR

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   

    麻煩你了,謝謝了,
    郵箱 wangfax88@tom.com
    2010-03-18 19:54 | DDR

    # re: JasperReport那些事兒(五)——再說表格式報表[未登錄]  回復  更多評論   

    如果子報表中的數(shù)據(jù)超過了一頁,顯示出來是什么樣子
    2010-06-29 11:43 | zhonghua

    # re: JasperReport那些事兒(五)——再說表格式報表[未登錄]  回復  更多評論   

    感激不盡,我可是找了三天三夜啊
    2010-08-15 01:04 | danny

    # re: JasperReport那些事兒(五)——再說表格式報表[未登錄]  回復  更多評論   

    我的數(shù)據(jù)源是xml,xml數(shù)據(jù)有三層。
    想用子報表套子報表,實現(xiàn),總是每個子報表的字段對應所有子子報表的數(shù)據(jù)。
    請幫忙分析下,如果聽不明白請加QQ26771284.謝謝
    2011-07-20 15:44 | sunny

    # re: JasperReport那些事兒(五)——再說表格式報表  回復  更多評論   

    您好博主,請問怎么設計表格動態(tài)列,PDF不顯示中文等問題,希望您能加我QQ:919724144,謝謝!
    2015-08-23 00:04 | 浪跡無恒
    主站蜘蛛池模板: 亚洲av无一区二区三区| 99在线免费视频| 亚洲无线一二三四区手机| a毛看片免费观看视频| 亚洲欧洲日产国产最新| 国产99视频精品免费视频7| 国产精品免费一区二区三区四区| 激情内射亚洲一区二区三区爱妻| 日韩在线免费电影| 一级毛片成人免费看免费不卡| 亚洲乱码无人区卡1卡2卡3| 国产国拍亚洲精品福利| 97在线观免费视频观看| 国产免费牲交视频免费播放| 亚洲videos| 亚洲精品国产精品乱码视色| 在线精品免费视频| 久久免费精彩视频| 阿v免费在线观看| 亚洲一区在线观看视频| 亚洲中文字幕久久精品无码喷水 | 67194成是人免费无码| 中国一级毛片免费看视频| 亚洲情A成黄在线观看动漫软件 | 野花香在线视频免费观看大全| 亚洲av永久无码嘿嘿嘿| 亚洲一区二区三区香蕉| 国产精品国产午夜免费福利看| 无码国产精品一区二区免费vr| 狠狠热精品免费观看| 亚洲AV无码一区二区三区在线| 国产精品亚洲成在人线| 免费真实播放国产乱子伦| 美女视频黄免费亚洲| 免费一区二区三区| 国产精品福利片免费看| 极品色天使在线婷婷天堂亚洲| 亚洲1区1区3区4区产品乱码芒果| 亚洲av无码国产精品色午夜字幕| 亚洲情侣偷拍精品| 免费一级毛片在线播放|