(JasperReports)使用JRBeanCollection作为DataSource,并在jrxml中处理它

时间:2015-07-02 14:40:22

标签: java jasper-reports

因此,我从我的数据库中获取DAO列表,然后将JRBeanCollectionDataSource传递给fill方法。这有效(制作一个空PDF)。

public void reportTest() {
    AwardDAO awardDAO = new AwardDAOImpl();
    List<Award> awards = null;

    try{

        awards = awardDAO.getAllAwards();
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(awards);

        JasperReport jasperReport =
        JasperCompileManager.compileReport("src/main/resources/hellojasper.jrxml");

        Map parameters = new HashMap();
        parameters.put("title", "Award Report");

        JasperPrint jasperPrint =
                JasperFillManager.fillReport(jasperReport, parameters, ds);
        JasperExportManager.exportReportToPdfFile(
                jasperPrint, "Awards.pdf");

       }
    catch (Exception e){
        e.printStackTrace();
    }
}

我不知道如何处理.jrxml文件中的信息。我已经搜索了一段时间,但我只是更加困惑。 我想要显示一个简单的表格。 谢谢!

2 个答案:

答案 0 :(得分:0)

您必须在Award中的jrxml相应的getter中声明字段,并在report的textField表达式中使用此字段。就是这样 见例子

stackoverflow.com/questions/21432871/accessing-the-only-java-bean-passed-to-jasper-records

P.S。您确定reportTest。在您的应用中了解路径“ src /main/resources/hellojasper.jrxml”吗?

答案 1 :(得分:0)

确保您的Award类具有您希望在PDF文件中显示的每个字段的getter和setter。

例如,如果我想显示带有以下字段的Product类:

<field name="productName" class="java.lang.String">
<field name="quantity" class="java.lang.String">
<field name="unitPrice" class="java.lang.String">
<field name="total" class="java.lang.String">

我可以使用POJO来表示Product类:

public class Product {
    private String productName;
    private String quantity;
    private String unitPrice;
    private String total;

    public void setProductName(String productName){
        this.productName = productName;
    }

    public String getProductName(){return productName;}

    public void setQuantity(String quantity){
        this.quantity = quantity;
    }

    public String getQuantity(){return quantity;}

    public void setUnitPrice(String unitPrice){
        this.unitPrice = unitPrice;
    }

    public String getUnitPrice(){return unitPrice;}

    public void setTotal(String total){
        this.total = total;
    }

    public String getTotal(){return total;}
}

然后我可以创建一个JRBeanCollectionDataSource:

List<Product> products = new ArrayList<Product>();
// Code to fill products
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(products);