1

Pentaho Report Designer レポートを Web ページに埋め込む方法を見つけようとしています。

PRD レポートの結果を単に印刷するという意味ではありません。実際には PRD を使用してレポートをデザインしたいと考えていますが、Web フレームワーク内で行います。

それは可能ですか?

ありがとう

4

2 に答える 2

0

これを行うためにサーバー pentaho を実行したくない場合は、出力が html、pdf などのレポートの内容であるサーブレットを作成できます。これはライブラリ pentaho report designer を使用して実現できます同じツールを使用して、最初にレポートを設計し、作成したサーブレットで実行し、場所、出力のタイプ、およびレポートで定義する追加のパラメーターをパラメーターとして渡します。

セッションをインポートします。ReportSession;

public class ServletReport extends 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 に答える
0

Pentaho BI Server を使用して、レポートを展開できます。これは、別のアプリが Web を介してレポートを生成できること、または BI サーバーのユーザーでさえレポートを生成できることを意味します。BIサーバーをレポートサーバーとして使用するために、シングルサインオンやその他の機能を構成できます。

レポートを編集する唯一の方法は、デスクトップ上で実行される Java アプリケーションである Pentaho Report Designer を使用することです。BI Server インターフェイスを介して、展開されたレポートのみを管理できます。

于 2012-12-22T22:14:55.370 に答える