我想弄清楚如何在网页上嵌入 Pentaho Report Designer 报告。
我的意思不仅仅是打印 PRD 报告的结果——我实际上仍然希望使用 PRD 设计报告,而是在 Web 框架内。
有可能这样做吗?
谢谢
我想弄清楚如何在网页上嵌入 Pentaho Report Designer 报告。
我的意思不仅仅是打印 PRD 报告的结果——我实际上仍然希望使用 PRD 设计报告,而是在 Web 框架内。
有可能这样做吗?
谢谢
您可以使用 Pentaho BI Server 来部署您的报表。这意味着另一个应用程序可以通过 Web 生成报告,甚至 BI Server 用户也可以生成报告。您可以配置单点登录和其他奇特的东西以将 BI 服务器用作报表服务器。
编辑报表的唯一方法是通过 Pentaho 报表设计器,它是一个在您的桌面上运行的 Java 应用程序。通过 BI 服务器界面,您只能管理已部署的报表。
如果您不想让服务器 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;
}
}