如何在 web 中嵌入 pentaho 报表设计器?
Posted
技术标签:
【中文标题】如何在 web 中嵌入 pentaho 报表设计器?【英文标题】:How to embed pentaho report designer in web? 【发布时间】:2012-12-05 11:21:46 【问题描述】:我正在尝试弄清楚如何在网页上嵌入 Pentaho Report Designer 报告。
我的意思不仅仅是打印 PRD 报告的结果——我实际上仍然希望使用 PRD 来设计报告,但要在 Web 框架内。
有可能吗?
谢谢
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于如何在 web 中嵌入 pentaho 报表设计器?的主要内容,如果未能解决你的问题,请参考以下文章