MongoDB的程序化报告生成

时间:2016-10-26 10:59:39

标签: java mongodb jasper-reports dynamic-reports

我在我的网络应用程序中使用MongoDB作为数据库。我希望在我的应用程序中有一个报告生成功能,以便向用户显示可用记录和字段的列表,并且他/她选择所有或部分可用字段,然后生成包含用户所选数据的pdf报告领域。

因此,我需要根据用户选择的字段在运行时以编程方式生成报告。我找到了一个类似mysql here的例子。

我应该如何为MongoDB而不是MySQL添加数据源?有没有其他方法可以完成这项工作?

Connection connection = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    connection = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
} catch (SQLException e) {
    e.printStackTrace();
    return;
} catch (ClassNotFoundException e) {
    e.printStackTrace();
    return;
}

JasperReportBuilder report = DynamicReports.report();
report
  .columns(
      Columns.column("Customer Id", "id", DataTypes.integerType()),
      Columns.column("First Name", "first_name",            DataTypes.stringType()),
      Columns.column("Last Name", "last_name", DataTypes.stringType()),
      Columns.column("Date", "date", DataTypes.dateType()))
  .title(Components.text("SimpleReportExample")
      .setHorizontalAlignment(HorizontalAlignment.CENTER))
      .pageFooter(Components.pageXofY())
      .setDataSource("SELECT id, first_name, last_name, date FROM customers",
                              connection);
try {
    report.show();
    report.toPdf(new FileOutputStream("c:/report.pdf"));
} catch (DRException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:0)

也许你现在已经解决了你的问题,但是对于寻找答案的其他人我反应过来了。 您可以使用JRBeanCollectionDataSource(..)进行此操作。动态报告在此创建了一个示例:http://www.dynamicreports.org/examples/collectiondatasourcereport

只需从MongoDB获取数据并将其加载到JRBeanCollectionDataSource中。然后使用setDataSource(..)

在报告上设置它
相关问题