GeneratePDF与JasperReports的图书馆和MongoDB
这里是我的GeneratePdf.java 导入...GeneratePDF与JasperReports的图书馆和MongoDB
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) {
}
}
蒙戈连接和获取数据():
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不是正确的方法去使用th e MongoDB连接器。看看这个测试随附的MongoDB的JasperSoft连接器源:
MongoDbDatasource/src目录/测试/ 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();
}
}
您需要添加以下行:
JRProperties.setProperty( “net.sf.jasperreports.query.executer.factory.MongoDbQuery”, “com.jaspersoft.mongodb.query.MongoDbQueryExecuterFactory”); 验证数据源jar文件中的路径,例如js-mongodb-datasource-0.5.0
你能分享一下代码片段吗? – 2017-01-18 16:05:33
我读过你的博客,这很有趣。我有一个新的问题[这里](http://*.com/questions/9340767/generatepdf-with-jasperreport-library - 和 - mongodb)如果你能帮助我。谢谢 – Louis 2012-02-18 13:17:34
新错误!我添加了log4j.xml(log4j.properties),并且我又出现了同样的错误: '24 Feb 2012 14:20:53 ERROR [org.apache.commons.digester.Digester]结束事件抛出异常 java.lang。 reflect.InvocationTargetException \t在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) \t在net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:156) .... \t的生成。 main(Generate.java:29) 引起:net.sf.jasperreports.engine.JRRuntimeException:没有查询执行器工厂注册为'MongoDbQuery'语言。 ...' – Louis 2012-02-24 14:24:54
嗨mdahlman,它看起来你上面提到的网站不工作。你能找到这个吗?请尝试提供示例代码/项目 – Prateek 2015-10-09 20:26:18