Pentaho Report Designer レポートを Web ページに埋め込む方法を見つけようとしています。
PRD レポートの結果を単に印刷するという意味ではありません。実際には PRD を使用してレポートをデザインしたいと考えていますが、Web フレームワーク内で行います。
それは可能ですか?
ありがとう
Pentaho Report Designer レポートを Web ページに埋め込む方法を見つけようとしています。
PRD レポートの結果を単に印刷するという意味ではありません。実際には PRD を使用してレポートをデザインしたいと考えていますが、Web フレームワーク内で行います。
それは可能ですか?
ありがとう
これを行うためにサーバー 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;
}
}
Pentaho BI Server を使用して、レポートを展開できます。これは、別のアプリが Web を介してレポートを生成できること、または BI サーバーのユーザーでさえレポートを生成できることを意味します。BIサーバーをレポートサーバーとして使用するために、シングルサインオンやその他の機能を構成できます。
レポートを編集する唯一の方法は、デスクトップ上で実行される Java アプリケーションである Pentaho Report Designer を使用することです。BI Server インターフェイスを介して、展開されたレポートのみを管理できます。