1

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

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

有可能这样做吗?

谢谢

4

2 回答 2

0

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

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

于 2012-12-22T22:14:55.370 回答
0

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

导入会话。报告会话;

公共类 ServletReport 扩展 HttpServlet {

public ServletReport() {
}


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

}

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { generateReport(req, resp); }

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;
}

}

于 2016-04-02T00:29:24.693 回答