【问题标题】:How to embed pentaho report designer in web?如何在 web 中嵌入 pentaho 报表设计器?
【发布时间】:2012-12-05 11:21:46
【问题描述】:

我正在尝试弄清楚如何在网页上嵌入 Pentaho Report Designer 报告。

我的意思不仅仅是打印 PRD 报告的结果——我实际上仍然希望使用 PRD 来设计报告,但要在 Web 框架内。

有可能吗?

谢谢

【问题讨论】:

    标签: web embed pentaho pentaho-report-designer


    【解决方案1】:

    您可以使用 Pentaho BI Server 来部署您的报表。这意味着另一个应用程序可以通过 Web 生成报告,甚至 BI Server 用户也可以生成报告。您可以配置单点登录和其他奇特的东西以将 BI 服务器用作报表服务器。

    编辑报表的唯一方法是通过 Pentaho 报表设计器,它是在您的桌面上运行的 Java 应用程序。通过 BI Server 界面,您只能管理已部署的报表。

    【讨论】:

      【解决方案2】:

      如果您不想让服务器 pentaho 运行来执行此操作,您可以制作一个 servlet,其输出是 html、pdf 等格式的报告内容,这可以使用库 pentaho 报告设计器来完成可以在同一个工具中找到,首先您设计报告,然后在您创建的 servlet 中运行它,将位置、输出类型和您在报告中定义的其他参数作为参数传递

      导入会话.ReportSession;

      公共类 ServletReport 扩展 HttpServlet {

      public ServletReport() {
      }
      
      
      public void init() {
            ClassicEngineBoot.getInstance().start();
      
      }
      

      受保护的 void doGet(HttpServletRequest req, HttpServletResponse 分别) 抛出 ServletException, IO异常{ 生成报告(请求,响应); }

      protected void doGet(HttpServletRequest req,    
                             HttpServletResponse resp) throws ServletException,
                                                              IOException {
          generateReport(req, resp);
      }
      protected void doPost(HttpServletRequest req,    
                             HttpServletResponse resp) throws ServletException,
                                                                IOException {
          generateReport(req, resp);
      }
      
      
      private void generateReport(HttpServletRequest req,
                                  HttpServletResponse resp) throws ServletException,
                                                                   IOException {
          HttpSession session = req.getSession(true);
          ReportSession values =
              (ReportSession)session.getAttribute("ReportSession");
          //  URL reportDefinitionURL = values.getReportDefinitionURL();
      
          String reportPath = req.getParameter("Report");
          String contenType = (String)req.getParameter("ContenType");
          //String isMDX = (String)req.getParameter("MDX");
          String url =
              req.getRequestURL().substring(0, req.getRequestURL().indexOf("servletreport")) +
              "Reportes/";
          URL reportDefinitionURL = new URL(url + reportPath);
          MasterReport report = createReportDefinition(reportDefinitionURL);
                  try {
                   //report.setQ
                  Map<String, Object> reportParameters =
                      values.getReportParameters();
                  if (null != reportParameters) {
                      for (String key : reportParameters.keySet()) {
                          report.getParameterValues().put(key,
                                                          (Object)reportParameters.get(key));
                      }
                  }
      
              } catch (Exception e) {
                  // TODO: Add catch code
                  e.printStackTrace();
              }
      
              OutputStream out = resp.getOutputStream();
              try {
                  if (contenType.equalsIgnoreCase("HTML")) {
                      resp.setContentType("text/html; charset=\"UTF-8\"");
                      HtmlReportUtil.createStreamHTML(report, out);
                  } else if (contenType.equalsIgnoreCase("PDF")) {
                      resp.setContentType("application/pdf");
                      PdfReportUtil.createPDF(report, out);
                  } else if (contenType.equalsIgnoreCase("EXCEL")) {
                      resp.setContentType("application/vnd.ms-excel");
                      ExcelReportUtil.createXLS(report, out);
                  } else if (contenType.equalsIgnoreCase("RTF")) {
                      resp.setContentType("application/rtf");
                      RTFReportUtil.createRTF(report, out);
                  }
              } catch (ReportProcessingException rpe) {
                  rpe.printStackTrace();
              } finally {
                  out.close();
              }
      
      }
      
      //Return a value using EL
      private Object executeValueExpression(String valueExpression) {
          FacesContext fctx = FacesContext.getCurrentInstance();
          ELContext elctx = fctx.getELContext();
          Application app = fctx.getApplication();
          ExpressionFactory exprFactory = app.getExpressionFactory();
          ValueExpression valueExpr =
              exprFactory.createValueExpression(elctx, valueExpression,
                                                Object.class);
          return valueExpr.getValue(elctx);
      }
      
      private MasterReport createReportDefinition(URL reportDefinitionURL) throws MalformedURLException {
          try {
              ResourceManager resourceManager = new ResourceManager();
              resourceManager.registerDefaults();
              Resource directly =
                  resourceManager.createDirectly(reportDefinitionURL,
                                                 MasterReport.class);
              MasterReport report = (MasterReport)directly.getResource();
              return report;
          } catch (ResourceException e) {
              e.printStackTrace();
          }
          return null;
      }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多