【问题标题】:How to pass ArrayList to jasper report如何将 ArrayList 传递给 jasper 报告
【发布时间】:2014-12-27 20:31:12
【问题描述】:

我想使用不同项目的 jasper 报告生成账单。为此,我定义了一些字符串数组,我想在账单中显示为项目列表。

我填写jasper报告的代码如下

System.out.println("In printing servlet");
        String [] prod = request.getParameterValues("prodn[]");
        String [] pkgdate = request.getParameterValues("pkgdate[]");
        String [] manufact = request.getParameterValues("manufact[]");
        String [] exp = request.getParameterValues("exp[]");
        String [] batch = request.getParameterValues("batch[]");
        String [] unit = request.getParameterValues("unit[]");
        String [] qty = request.getParameterValues("qty[]");
        String [] subtot = request.getParameterValues("subtot[]");
        ArrayList<String> prodname = new ArrayList<String>();
        ArrayList<String> packagedate = new ArrayList<String>();
        ArrayList<String> manufactdate = new ArrayList<String>();
        ArrayList<String> exipry = new ArrayList<String>();
        ArrayList<String> batchno = new ArrayList<String>();
        ArrayList<String> unitprice = new ArrayList<String>();
        ArrayList<String> quantity = new ArrayList<String>();
        ArrayList<String> Subtotal = new ArrayList<String>();
        Map<String, Object> param = new HashMap<String, Object>();
        try {
        JasperPrint jasperPrint =null;
        InputStream is=this.getClass().getResourceAsStream("/com/medicam/servlets/Invoice.jrxml");
        JasperReport jasperReport = JasperCompileManager.compileReport(is);
        for(int i=0;i<prod.length;i++)
        {
            prodname.add(prod[i]);
            packagedate.add(pkgdate[i]);
            manufactdate.add(manufact[i]);
            exipry.add(exp[i]);
            batchno.add(batch[i]);
            unitprice.add(unit[i]);
            quantity.add(qty[i]);
            Subtotal.add(subtot[i]);
            System.out.println("Name :"+prod[i]+" Pkg date: "+pkgdate[i]+"Man :"+manufact[i]+" Expi: "+exp[i]+" Batch: "+batch[i]+" Unit: "+unit[i]+" Quan: "+qty[i]+" Sub:"+subtot[i]);
        }   
        param.put("prodname", String.valueOf(prodname));
        param.put("pkgdate", String.valueOf(packagedate));
        param.put("manfdate", String.valueOf(manufactdate));
        param.put("expdate", String.valueOf(exipry));
        param.put("batch", String.valueOf(batchno));
        param.put("unit", String.valueOf(unitprice));
        param.put("qty", String.valueOf(quantity));
        param.put("subtot", String.valueOf(Subtotal));
        jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());
        JasperViewer.viewReport(jasperPrint, false);
            } 
        catch (Exception e) {
                e.printStackTrace();
            } 

Sring 数组用于填充传递给 HashMap 以填充我的报告的 ArrayList。 HasMap 键是在 Invoice.jrxml 文件中声明的参数名称 参数名称被赋予文本文件,如

<textField>
                <reportElement x="-1" y="60" width="80" height="101" uuid="06fab25e-d80f-4535-8d85-1bea04dfca84"/>
                <textElement textAlignment="Center"/>
                <textFieldExpression><![CDATA[$P{prodname}]]></textFieldExpression>
            </textField>

我想打印项目列表,但我得到的输出是逗号分隔的值 单行。

示例输出here 和下图。

【问题讨论】:

标签: java jasper-reports


【解决方案1】:

您可以将ArrayList 传递给Jasper Report,就像将字符串传递给Jasper Report 一样。

param.put("list",listObject);

【讨论】:

    【解决方案2】:

    String.valueOf() 将返回一个我相信的分隔字符串数组。

    如果您使用的是 contentvalues(我更熟悉的东西),答案将在您的 put 行中。

    Yours:  I assume this is supposed to fill para with all the values of prodname into prodname
    param.put("prodname", String.valueOf(prodname));
    

    你的 prodname 键最终会变成 x、y、z,有趣的东西,你好吗,......

    然后,当您下次将 prodname 作为字符串取出时,您将获得分隔字符串。

    所以我这样做的方式,我认为它适用于哈希图以及内容值只是扩展了这些。你需要先创建一个临时的 hashmap 数组

        ArrayList<Map <string, object>> BuildMe;   // For me these are ArrayList<ContentValues>
        Map <String, Object> addMe;   // Again for me this is just ContentValues addMe; so I hope ive got the syntax correct
        for(int i=0;i<prod.length;i++)
        {
            addMe = new Map<String,Object>;
            addMe.add(prod[I]);
            ...
            BuildMe.add(addMe);
            System.out.println("Name :"+prod[i]+" Pkg date: "+pkgdate[i]+"Man :"+manufact[i]+" Expi: "+exp[i]+" Batch: "+batch[i]+" Unit: "+unit[i]+" Quan: "+qty[i]+" Sub:"+subtot[i]);
        }  
    

    完成后,您将拥有所有产品哈希图的 ArrayList。然后,您可以按照自己的喜好浏览所有内容,然后打印出来并按照您喜欢的格式进行格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多