java - 使用 JasperReports 库和 MongoDB 生成 PDF

标签 java mongodb jasper-reports mongo-java

这是我的 GeneratePdf.java 导入...

  public class GeneratePdf {
        public static void main(String[] args) {
        try {
            JRDataSource ds = getDatasource();
            // - Chargement et compilation du rapport
line32      JasperDesign jasperDesign = JRXmlLoader.load("/home/gocoffee.jrxml");
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

            // - Paramètres à envoyer au rapport
            Map parameters = new HashMap();
            parameters.put("Titre", "Titre");

            // - Execution du rapport
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, ds);

            // - Création du rapport au format PDF
            JasperExportManager.exportReportToPdfFile(jasperPrint, "home/test2.pdf");
        } catch (JRException e) {
        }
    }

Mongo连接和获取数据():

private static JRDataSource getDatasource() {
        // Retrieve session
        try{
            Mongo m = new Mongo("localhost", 27017);
            DB db = m.getDB("test");
            DBCollection t = db.getCollection("test");
            List<DBObject> list = t.getIndexInfo();
            JRDataSource ds = new JRBeanCollectionDataSource(list);
            return ds;
        } catch (UnknownHostException e) {
            System.out.println("Error mongo connection");
        } catch (Exception e) {
            System.out.println("Other Exception");
        }
        return null;
    }
}

我收到这个错误,但我不明白:

run:
17-Feb-2012 17:07:26 org.apache.commons.digester.Digester endElement
SEVERE: End event threw exception
java.lang.reflect.InvocationTargetException
....
....
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156)
    at GeneratePdf.main(GeneratePdf.java:32)

Caused by: net.sf.jasperreports.engine.JRRuntimeException: No query executer factory registered for the 'MongoDbQuery' language.
    at net.sf.jasperreports.engine.util.JRQueryExecuterUtils.getQueryExecuterFactory(JRQueryExecuterUtils.java:64)
    at net.sf.jasperreports.engine.design.JRDesignDataset.queryLanguageChanged(JRDesignDataset.java:1122)
    at net.sf.jasperreports.engine.design.JRDesignDataset.setQuery(JRDesignDataset.java:600)
    at net.sf.jasperreports.engine.design.JasperDesign.setQuery(JasperDesign.java:789)
    ... 28 more

最佳答案

使用 JRBeanCollectionDataSource 并不是使用 MongoDB 连接器的正确方法。看一下 Jaspersoft MongoDB Connector 源代码附带的这个测试:

MongoDbDatasource/src/test/java/com/jaspersoft/mongodb/ReportTest.java

二进制连接器和源代码都在 project page 上.

为了使这个答案独立,这里有一个代码片段展示了如何填充 MongoDB 报告。它是我上面提到的文件的修改后的摘录。

String mongoURI = "mongodb://bdsandbox6:27017/test";
MongoDbConnection connection = null;
Map<String, Object> parameters = new HashMap<String, Object>();
try {
  connection = new MongoDbConnection(mongoURI, null, null);
  parameters.put(MongoDbDataSource.CONNECTION, connection);
  File jasperFile;
  jasperFile = new File("MongoDbReport.jasper");
  JasperCompileManager.compileReportToFile("MongoDbReport.jrxml", "MongoDbReport.jasper");
  JasperFillManager.fillReportToFile("MongoDbReport.jasper", parameters);
  JasperExportManager.exportReportToPdfFile("MongoDbReport.jrprint");
}
} catch (Exception e) {
  e.printStackTrace();
} finally {
  if (connection != null) {
    connection.close();
  }
}

关于java - 使用 JasperReports 库和 MongoDB 生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332373/

相关文章:

java - jasper 报告从 jasper 加载报告

java - 在 JasperReport/iReport 中包含长静态文本的最佳方法是什么?

java - Maven 程序集 : DependencySet or ModuleSet

node.js - 显示mongodb中字段值部分匹配的文档

c++ - 如何为其构造函数采用右值的类声明变量?

java - 该文档没有页面。碧 Jade 报告

java - 用 Java 压缩 用 PHP 解压

java - 手动超时java中的httpurlconnection

java - 如何更改每一行的背景颜色?

node.js - 从表单数据设置 Mongoose 模型属性