1

我正在使用Spring 3iReportJasperReports 4.5.0来生成报告。我有三个如下表。

TableNameFields                    
DN             date                        
DNProd      prodName, prodQty
DNPay       cost, totalCost         

问题是我需要在单个报告中显示日期、产品名称、产品数量、成本、总成本字段。但是这些指向不同的POJO类。我在谷歌中搜索过这个并找到了一些解决方案,比如使用子报告。但由于我是这些报告的新手,我不知道这是否是正确的解决方案。如果可能的话,任何人都可以用任何样本为我指明正确的方向。

4

1 回答 1

0

根据我的建议,DynamicJasper 最适合您的情况。您需要正确和 HQL,它将从具有正确连接的相应 POJO 中获取您在问题中描述的所有字段。

在执行此 HQL 时,您将获得列表。您必须传递给 DynamicJasper 才能为您构建报告。它将自动从 pojo 字段名称中获取列名称。

以下是相同的示例。

Session session = null;
        try {
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            session.beginTransaction();

            List list = session.createQuery("from Employee").list();

            session.getTransaction().commit();

            DynamicReport dynamicReport = new ReflectiveReportBuilder(list).build();
            dynamicReport.setTitle("List of Employees");
            JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(dynamicReport, new ClassicLayoutManager(), list);
            JasperViewer.viewReport(jasperPrint);
            JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\TestDynamicJasper.pdf"); 
            resp.getWriter().write("Welcome to Show Report");
            resp.getWriter().flush();
            resp.getWriter().close();
        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ColumnBuilderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {
            if(session != null)
                session.close();
        }

希望这对您有所帮助。:)

于 2013-06-04T07:45:56.103 回答