使用JasperReports库和MongoDB生成PDF

这是我的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 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目录/测试/ JAVA / COM /的JasperSoft / MongoDB的/ ReportTest.java

二进制连接器和源都在项目页面上 。

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

 String mongoURI = "mongodb://bdsandbox6:27017/test"; MongoDbConnection connection = null; Map parameters = new HashMap(); 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”); validation数据源jar文件中的路径,例如js-mongodb-datasource-0.5.0