<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
    數據加載中……

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

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

        數據源結構:
    <?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>

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

        第二個,DepartmentList_department.jrxml.

        第三個,DepartmentList_department_person.jrxml.

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

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

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

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

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

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

    評論

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

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

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

    你好,我在本地上跑起來了你的例子,確實很好很強大,現在我的數據庫里有倆張表,父子關系的表,想做出跟你一樣的顯示效果,但是沒成功,顯示的很亂,主要是子報表顯示的很亂,我對子報表的<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>是這樣設置的,下面是數據庫腳本和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', '廣州白云書店', '白云區', '56234567', 'ae333333');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp111111', '北京同學書社', '海淀區', '89760009', 'ae111111');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp222222', '上海學友書店', '浦東區', '78987666', 'ae222222');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp333333', '上海三聯圖書館', '寧杭區', '56789123', 'ae222222');
    insert into BCOMPANY (BCOMID, BCOMNAME, BCOMADD, BCOMTEL, AREAID)
    values ('cp444444', '天津成章書店', '塘沽區', '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[地區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那些事兒(五)——再說表格式報表[未登錄]  回復  更多評論   

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

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

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

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

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

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

    您好博主,請問怎么設計表格動態列,PDF不顯示中文等問題,希望您能加我QQ:919724144,謝謝!
    2015-08-23 00:04 | 浪跡無恒
    主站蜘蛛池模板: 国产免费人人看大香伊| 亚洲韩国精品无码一区二区三区| 成人午夜亚洲精品无码网站| 国产成人免费ā片在线观看| 免费观看无遮挡www的小视频| 国产亚洲精品资在线| 亚洲精品无码午夜福利中文字幕| 永久在线毛片免费观看| 免费被黄网站在观看| 在线观看日本免费a∨视频| 久久免费区一区二区三波多野| 一级人做人a爰免费视频| 日韩久久无码免费毛片软件 | 美景之屋4在线未删减免费| 亚洲爆乳精品无码一区二区| 国产裸模视频免费区无码| 亚洲色www永久网站| 国产亚洲色婷婷久久99精品| 成人无码区免费视频观看| 怡红院免费的全部视频| 亚洲欧好州第一的日产suv| 久久亚洲精品无码| 免费a级毛片在线观看| 亚洲免费网站在线观看| 一级毛片免费不卡| 亚洲av无码专区在线观看下载| 亚洲AV乱码久久精品蜜桃| 免费无遮挡无码永久在线观看视频| 十九岁在线观看免费完整版电影| 男女男精品网站免费观看| 亚洲va在线va天堂va手机| 亚洲AV无码乱码国产麻豆穿越 | 日本片免费观看一区二区| 久久久精品国产亚洲成人满18免费网站 | 很黄很色很刺激的视频免费| 中文在线观看免费网站| 边摸边吃奶边做爽免费视频99 | 亚洲AV区无码字幕中文色| 免费大黄网站在线观| 成人毛片18女人毛片免费视频未 | 四虎成人免费影院网址|