jasperreport使用动态jason数据源

前段时间一直在看DynamicReport,使用xml作为数据源,看了好多资料。然后说是要用jason作为数据源,找了好久DynamicReport没发现支持jason。快速切换到了jasper。这里使用到了.jxml模板和json相结合,给出代码如下:

本文版翻译权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

参考链接:http://bbs.csdn.net/topics/390423061?page=1

模板代码:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="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="templatedesign1" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="575" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="e52850f2-70ba-4ac8-b6d8-2cac0212a9b1">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString language="json">
        <![CDATA[sales.item]]>
    </queryString>
    <field name="quotationNo1" class="java.lang.String"/>
    <field name="quotationNo" class="java.lang.String"/>
    <field name="refernceNo" class="java.lang.String"/>
    <field name="quotationDate" class="java.lang.String"/>
    <field name="pic" class="java.lang.String"/>
    <field name="email" class="java.lang.String"/>
    <field name="tel" class="java.lang.String"/>
    <field name="mobile" class="java.lang.String"/>
    <field name="to" class="java.lang.String"/>
    <field name="attn" class="java.lang.String"/>
    <field name="mv" class="java.lang.String"/>
    <field name="imo" class="java.lang.String"/>
    <field name="equipment" class="java.lang.String"/>
    <field name="project" class="java.lang.String"/>
    <field name="count" class="java.lang.Integer"/>
    <field name="price" class="java.lang.Integer"/>
    <field name="total" class="java.lang.Integer"/>
    <field name="ps" class="java.lang.String"/>
    <field name="serviceCharge" class="java.lang.String"/>
    <field name="materialCharge" class="java.lang.String"/>
    <field name="allCharge" class="java.lang.String"/>
    <group name="groupName"/>
    <title>
        <band height="240">
            <textField isStretchWithOverflow="true">
                <reportElement x="365" y="106" width="200" height="20" uuid="eb0cfa20-647b-455c-a812-fffa3399c071"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Quotation No:  "+$F{quotationNo}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="19" y="106" width="200" height="20" uuid="48bb6b51-6811-40a3-bdc6-79b314716885"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Your Refernce No.:  "+$F{refernceNo}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="365" y="127" width="200" height="20" uuid="efbeda2f-afbc-4585-aacb-b9c7ccc10468"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Quotation Date:  "+$F{quotationDate}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="365" y="146" width="200" height="20" uuid="a6ba9479-b1a2-4fe3-afbf-85ccc34b06bd"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["PIC:  "+$F{pic}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="365" y="166" width="200" height="20" uuid="ade90e4f-db8d-4951-9020-b9ee5aa3bf95"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Email:  "+$F{email}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="365" y="187" width="200" height="20" uuid="8a7c9e25-e680-4239-a971-b8ef009d0e8c"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Tel:  "+$F{tel}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="365" y="208" width="200" height="20" uuid="1bc1ce84-ab53-49b7-8a9a-e3025d5fe03a"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Mobile:  "+$F{mobile}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="19" y="146" width="200" height="20" uuid="dbe5f9f1-0a41-40b8-b4a3-fc35f1bf8c09"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["To:  "+$F{to}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="19" y="166" width="200" height="20" uuid="0b1f9b9b-0f49-44f5-bb4b-45e885347d72"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["Attn:  "+$F{attn}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="19" y="187" width="200" height="20" uuid="429c115d-f7da-423d-99af-dcc610928e53"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["M.V.:  "+$F{mv}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="19" y="208" width="200" height="20" uuid="6acc98a1-e76a-44f3-a3f2-93f2aae88bfa"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <textFieldExpression><![CDATA["IMO:  "+$F{imo}]]></textFieldExpression>
            </textField>
            <line>
                <reportElement x="19" y="85" width="542" height="1" uuid="71e5f04d-9440-4e60-aca5-5c5d1bec0774"/>
            </line>
            <line>
                <reportElement x="19" y="105" width="542" height="1" uuid="e809947c-54f3-4a41-a659-83c1e7f54004"/>
            </line>
            <line>
                <reportElement x="19" y="231" width="542" height="1" uuid="3165ccd4-6bd8-4437-b0e3-7134d8e4b02a"/>
            </line>
        </band>
    </title>
    <columnHeader>
        <band height="20">
            <rectangle>
                <reportElement x="19" y="0" width="56" height="20" uuid="90f1f241-3958-415b-a38a-13bca569dda8"/>
            </rectangle>
            <rectangle>
                <reportElement x="75" y="0" width="84" height="20" uuid="440c1ab9-5646-4d13-bfa3-19fe29f7c820"/>
            </rectangle>
            <rectangle>
                <reportElement x="158" y="0" width="200" height="20" uuid="df915095-5af0-485f-8ac8-a6b423948bbf"/>
            </rectangle>
            <rectangle>
                <reportElement x="358" y="0" width="56" height="20" uuid="53ea7c38-ba4c-4192-8511-1efaf71f7cfb"/>
            </rectangle>
            <rectangle>
                <reportElement x="413" y="0" width="84" height="20" uuid="1f0566e6-27a1-4f6f-b2cb-bb340da62642"/>
            </rectangle>
            <rectangle>
                <reportElement x="495" y="0" width="70" height="20" uuid="ba52d696-893a-4290-a72b-ba30aa6dcc1a"/>
            </rectangle>
            <staticText>
                <reportElement x="19" y="0" width="56" height="20" uuid="9bcf5615-aa7e-4517-9180-7c3c38eebb5e"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[序号]]></text>
            </staticText>
            <staticText>
                <reportElement x="75" y="0" width="84" height="20" uuid="0a2e3a69-31e3-4000-b371-a3133d2991dc"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[设备]]></text>
            </staticText>
            <staticText>
                <reportElement x="158" y="0" width="200" height="20" uuid="5df68d5c-9473-4dc0-a151-ee5f8cfc684a"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[项目]]></text>
            </staticText>
            <staticText>
                <reportElement x="358" y="0" width="56" height="20" uuid="59b80257-4212-4b10-8c2f-3084e51743c2"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[数量]]></text>
            </staticText>
            <staticText>
                <reportElement x="413" y="0" width="84" height="20" uuid="a9c16c7d-bdfe-489a-9b3b-4bb5b3656a8c"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[单价(RMB)]]></text>
            </staticText>
            <staticText>
                <reportElement x="495" y="0" width="70" height="20" uuid="e6a2a4ba-4948-4c6a-b4e5-f88ab24f954e"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑"/>
                </textElement>
                <text><![CDATA[合计(RMB)]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="20">
            <rectangle>
                <reportElement x="19" y="0" width="56" height="20" uuid="d949ecef-26b7-4a99-8608-c4d07aa4d6d0"/>
            </rectangle>
            <rectangle>
                <reportElement x="75" y="0" width="84" height="20" uuid="e344b5f1-6b43-465e-a2c5-b2d81b9a788f"/>
            </rectangle>
            <rectangle>
                <reportElement x="158" y="0" width="200" height="20" uuid="1ce0bea6-78d5-4f0a-99cd-7a6e774a83ed"/>
            </rectangle>
            <rectangle>
                <reportElement x="358" y="0" width="56" height="20" uuid="768f5e11-0cae-4d71-8b86-47a6c5254505"/>
            </rectangle>
            <rectangle>
                <reportElement x="413" y="0" width="84" height="20" uuid="51d69656-af3f-41a2-a897-799a024456cc"/>
            </rectangle>
            <rectangle>
                <reportElement x="495" y="0" width="70" height="20" uuid="729a90ba-1ded-4c87-9ef5-f91afa11d6b9"/>
            </rectangle>
            <textField>
                <reportElement x="19" y="0" width="56" height="20" uuid="c00767a0-a5f9-41c5-951a-2190fdb076d6"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$V{REPORT_COUNT}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="75" y="0" width="84" height="20" uuid="de4daa80-8455-4786-abc4-629beae2f0eb"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$F{equipment}]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="false">
                <reportElement x="158" y="0" width="200" height="20" uuid="14f3f1d0-a7b8-48c8-a220-a75db323fd52"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[" "]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="358" y="0" width="56" height="20" uuid="3057876d-467f-4543-b31e-e2ef1b72bb88"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$F{count}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="413" y="0" width="84" height="20" uuid="9f609834-c546-4b49-a704-37d3ac94e57a"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$F{price}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="495" y="0" width="70" height="20" uuid="2dfae995-90a8-4fb7-909a-bbf8765ae820"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$F{total}]]></textFieldExpression>
            </textField>
            <rectangle>
                <reportElement x="565" y="0" width="17" height="20" uuid="ddb23140-6fbf-4f1b-abff-7de2fb4f606d"/>
            </rectangle>
        </band>
    </detail>
    <summary>
        <band height="160">
            <staticText>
                <reportElement x="19" y="0" width="200" height="20" uuid="e7c5057f-9ecf-4dee-bd7b-f134739d4e01"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑" isBold="true"/>
                </textElement>
                <text><![CDATA[注:]]></text>
            </staticText>
            <staticText>
                <reportElement x="19" y="51" width="543" height="20" uuid="5c083135-ba8d-49cf-b5b7-d02c0ef0ec5a"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="微软雅黑" size="10"/>
                </textElement>
                <text><![CDATA[Please mention our quotzation no. in you purchasing order]]></text>
            </staticText>
            <staticText>
                <reportElement x="19" y="72" width="543" height="20" uuid="86e69270-73f5-4fe9-9c0d-0ec9c56e250d"/>
                <textElement textAlignment="Left" verticalAlignment="Top">
                    <font fontName="微软雅黑" size="10"/>
                </textElement>
                <text><![CDATA[谢谢询价!确认时请使用报价号,谢谢]]></text>
            </staticText>
            <textField isStretchWithOverflow="true">
                <reportElement x="19" y="21" width="543" height="29" uuid="11b0df67-f879-4bcb-9b47-1077cdef4d9b"/>
                <textElement textAlignment="Left" verticalAlignment="Top">
                    <font fontName="微软雅黑" size="8"/>
                </textElement>
                <textFieldExpression><![CDATA[""+$F{ps}]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true">
                <reportElement x="362" y="93" width="200" height="20" uuid="1569be55-9fbe-469d-ba7d-ad605559f56d"/>
                <textElement textAlignment="Left" verticalAlignment="Top">
                    <font fontName="微软雅黑" size="10"/>
                </textElement>
                <textFieldExpression><![CDATA["服务费小计:"+$F{serviceCharge}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="362" y="114" width="200" height="20" uuid="4e3b94da-6a9c-49e5-98c9-71d3f942d88c"/>
                <textElement textAlignment="Left" verticalAlignment="Top">
                    <font fontName="微软雅黑" size="10"/>
                </textElement>
                <textFieldExpression><![CDATA["材料费小计: "+$F{materialCharge}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="362" y="134" width="200" height="20" uuid="1f6d2430-5c08-4a91-8865-2a81489a358e"/>
                <textElement textAlignment="Left" verticalAlignment="Top">
                    <font fontName="微软雅黑" size="10"/>
                </textElement>
                <textFieldExpression><![CDATA["总计: "+$F{allCharge}]]></textFieldExpression>
            </textField>
        </band>
    </summary>
</jasperReport>
NewPaneTest.jrxml

json数据源:

public class JSONSource {
    public final static String json = "{\"sales\": {\"item\": ["
            + "{\"-id\": \"1\",\"equipment\": \"测探仪\",\"project\": \"维修\",\"count\": \"1\",\"price\": \"2500\",\"total\": \"2500\",\"ps\": \"1)贵司雷达申请单是两台S波段雷达,应该是不准确的,因此我们报价一个X波段磁控管,一个S波段磁控管;2)罗经球寿命是3年,其中有一台罗经球使用2年半,建议更换该罗经球,从而两台罗经球使用时间不同,确保两台罗经球不至于由于使用时间临近而同时出现故障;3)以上工程,正常我们会在3天内完成,如果延长时间,我们会适当增加一些交通费\", \"refernceNo\": \"1000254852\", \"quotationNo\": \"15TMKQS090701\",\"quotationDate\": \"2016-11-21 13:48\",\"to\": \"天津中散船舶管理有限公司\",\"pic\": \"Kang Baoyi(康宝义)\",\"attn\": \"马洪元主管\",\"email\": \"kangbaoyi@cosbulk.com\",\"mv\": \"China Energy\",\"imo\": \"9495064\",\"tel\": \"(86)22 65705801\",\"mobile\": \"(86) 13602170331\",\"serviceCharge\": \"25600\",\"materialCharge\": \"91590\",\"allCharge\": \"117190\"},"
            + "{ \"-id\": \"1\", \"equipment\": \"测探仪\",\"project\": \"探头\",\"count\": \"1\",\"price\": \"12500\",\"total\": \"12500\"},"
            + " {\"-id\": \"1\",\"equipment\": \"电罗经\",\"project\": \"保养\",\"count\": \"2\",\"price\": \"2200\",\"total\": \"4400\"},"
            + "{\"-id\": \"1\",\"equipment\": \"交通费\",\"project\": \" \",\"count\": \"1\",\"price\": \"1500\",\"total\": \"1500\",\"ps\": \"1)贵司雷达申请单是两台S波段雷达,应该是不准确的,因此我们报价一个X波段磁控管,一个S波段磁控管;2)罗经球寿命是3年,其中有一台罗经球使用2年半,建议更换该罗经球,从而两台罗经球使用时间不同,确保两台罗经球不至于由于使用时间临近而同时出现故障;3)以上工程,正常我们会在3天内完成,如果延长时间,我们会适当增加一些交通费\",\"refernceNo\": \"1000254852\",\"quotationNo\": \"15TMKQS090701\",\"quotationDate\": \"2016-11-21 13:48\",\"to\": \"天津中散船舶管理有限公司\",\"pic\": \"Kang Baoyi(康宝义)\",\"attn\": \"马洪元主管\",\"email\": \"kangbaoyi@cosbulk.com\",\"mv\": \"China Energy\",\"imo\": \"9495064\",\"tel\": \"(86)22 65705801\",\"mobile\": \"(86) 13602170331\",\"serviceCharge\": \"25600\",\"materialCharge\": \"91590\",\"allCharge\": \"117190\"}"
            + "]}}";}
JSONSource

主代码:

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Locale;

import net.sf.dynamicreports.jasper.base.export.JasperPdfExporter;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter;
import net.sf.jasperreports.engine.query.JsonQueryExecuterFactory;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.export.ExporterInput;
import net.sf.jasperreports.export.OutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleExporterInput;
import net.sf.jasperreports.export.SimpleOutputStreamExporterOutput;
import net.sf.jasperreports.export.SimpleXlsxReportConfiguration;
import net.sf.jasperreports.view.JasperViewer;

public class testJsonBuffer {

    public static void main(String[] args) {
        JasperDesign design;
        try {
            design = JRXmlLoader.load("F:\\NewPaneTest.jrxml");
            HashMap<String, Object> paramsMap = new HashMap<String, Object>();

            // 第二种配置数据源的方式 InputStream
            InputStream is = new ByteArrayInputStream(JSONSource.json1.getBytes("UTF-8"));
            paramsMap.put("JSON_INPUT_STREAM", is);
            // 配置其他参数
            paramsMap.put(JsonQueryExecuterFactory.JSON_LOCALE, Locale.ENGLISH);
            paramsMap.put(JRParameter.REPORT_LOCALE, Locale.US);
            // 加载模板
            JasperReport report = JasperCompileManager.compileReport(design);
            // 填充数据
            JasperPrint print = JasperFillManager.fillReport(report, paramsMap);
            // 预览显示
            JasperViewer.viewReport(print);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
testJsonBuffer

 

注意:

模板里面的查询语句要设为json,字段要对应上

 本文版翻译权归__馋猫和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

posted on 2017-04-01 17:38  __馋猫  阅读(3302)  评论(0编辑  收藏  举报