2013-03-12 38 views
0

我打算通過pentaho生成pdf報告。我對pentho RD很陌生。Pentaho report.setQuerty

我能夠通過在prpt中預先配置(dbconntion +查詢和傳遞參數)並從java調用它來生成一個真實的報告。 這很好。

問題:我打算使用report.setQuery(「dummyQuery」,「SELECT NAME,ID FROM test.person」); //一些查詢來動態生成報告。 如果這是可能的..?

當我使用report.setQuery與相同的查詢,我的報告生成一個空白pdf? 我想我應該配置一個HQL數據源..來實現這一目標?

pre-config PRPT - Im顯示2個值,名稱和ID。

我能夠通過傳遞參數動態生成此pdf。
請大家幫忙動態生成這個PDF格式你的setQuery或「如何使用setQuery」。
我真的很想學習生成pentaho pdf報告。

package com.report; 

    import java.io.File; 
    import java.io.IOException; 
    import javax.servlet.ServletException; 
    import javax.servlet.annotation.WebServlet; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot; 
    import org.pentaho.reporting.engine.classic.core.MasterReport; 
    import org.pentaho.reporting.engine.classic.core.modules.output.pageable.pdf.PdfReportUtil; 
    import org.pentaho.reporting.libraries.resourceloader.Resource; 
    import org.pentaho.reporting.libraries.resourceloader.ResourceManager; 

    /** 
    * Servlet implementation class Generate 
    */ 
    @WebServlet("/Generate") 
    public class Generate extends HttpServlet { 
     private static final long serialVersionUID = 1L; 

     /** 
     * @see HttpServlet#HttpServlet() 
     */ 
     public Generate() { 
      super(); 
      // TODO Auto-generated constructor stub 
     } 

     /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 
     *  response) 
     */ 
     protected void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
      // TODO Auto-generated method stub 
      try{ 
      response.reset(); 
      response.setContentType("application/pdf"); 
      ClassicEngineBoot.getInstance().start(); 
      ResourceManager manager = new ResourceManager(); 
      manager.registerDefaults(); 
      String PrptPath ="C:\\Users\\3692902\\Desktop\\pentahoTest.prpt"; 


      //generate report through pre-configured prpt (db connection + query) 
      Resource res = manager.createDirectly(new File(PrptPath), MasterReport.class); 
      MasterReport report = (MasterReport) res.getResource(); 
      report.getParameterValues().put("IDValue",101); 

      //generate report through query????? 
      //report.setQuery("SELECT ID FROM test.person"); 

      PdfReportUtil.createPDF(report,response.getOutputStream()); 
      } 
      catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

     /** 
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
     *  response) 
     */ 
     protected void doPost(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
      // TODO Auto-generated method stub 
     } 

    } 

回答

0

您正在從PRPT文件加載報告。那麼爲什麼不通過添加SQL數據源(菜單:數據 - >添加數據源 - > SQL)來在報表設計器中預定義您的查詢?

然後,假設你想通過IDValue過濾,你會設置你的查詢(內珠三角,不是你的代碼):

SELECT ID FROM test.person WHERE ID = ${IDValue} 
0

那是「最難」的方式來生成報表引擎嵌入報告在Java中。

下載與您正在使用的引擎版本匹配的Pentaho Report Designer(例如:Pentaho Report Designer 5.4Pentaho Reporting Engine 5.4)。

來自Pentaho報告設計器,創建一個新報告並開始創建它(1. Creating your first report)創建您的連接(或您需要的任何數據源),創建您的查詢並定義您的參數。

最後,使用上面自己的代碼從servlet調用報表並顯示它。

記住,Pentaho Report Designer是您在報告中定義所有需要的東西的地方,然後只需發送參數並從任何地方生成它!