2012-02-17 28 views
1

這裏是我的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 

回答

3

使用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(); 
    } 
} 
+0

我讀過你的博客,這很有趣。我有一個新的問題[這裏](http://stackoverflow.com/questions/9340767/generatepdf-with-jasperreport-library - 和 - mongodb)如果你能幫助我。謝謝 – Louis 2012-02-18 13:17:34

+0

新錯誤!我添加了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

+1

嗨mdahlman,它看起來你上面提到的網站不工作。你能找到這個嗎?請嘗試提供示例代碼/項目 – Prateek 2015-10-09 20:26:18

0

您需要添加以下行:
JRProperties.setProperty( 「net.sf.jasperreports.query.executer.factory.MongoDbQuery」, 「com.jaspersoft.mongodb.query.MongoDbQueryExecuterFactory」); 驗證數據源jar文件中的路徑,例如js-mongodb-datasource-0.5.0

+0

你能分享一下代碼片段嗎? – 2017-01-18 16:05:33