.prpt 报告从 java 运行
Posted
技术标签:
【中文标题】.prpt 报告从 java 运行【英文标题】:.prpt reports running from java 【发布时间】:2013-12-30 13:42:42 【问题描述】:之前我使用 Pentaho 报表,在那里我可以使用 pentaho 报表设计器创建报表并将 .prpt 文件部署到 BI 服务器上。它会正常工作。
现在我正在寻找一种解决方案,我可以将 .prpt 文件放入 Java 程序中并像 jasper 报告(.jrxml 文件)一样运行。因为我需要将 Pentaho 报告与我的 Web 应用程序集成。
我可能会问一个非常基本的问题。但我没有找到合适的文件。请指出一些正确的位置,示例代码会有所帮助。
【问题讨论】:
【参考方案1】:由于已接受答案中的第一个链接似乎不再起作用,正在寻找示例的人可能会发现这更有用:https://github.com/pentaho/pentaho-reporting/blob/master/engine/samples/source/org/pentaho/reporting/engine/classic/samples
一些示例中的代码有点复杂,所以我发布了我自己的报告生成器类,它只包含生成 PDF 报告的基本要素:
public class ReportGenerator
public byte[] generateReport(byte[] templateBytes, Mapparams) 抛出异常 ClassicEngineBoot.getInstance().start(); MasterReport reportData = loadTemplateDefinition(templateBytes); addParametersToReport(params, reportData); byte[] reportBytes = generateReport(reportData); 返回报告字节; 私人 MasterReport loadTemplateDefinition(byte[] templateBytes) 抛出异常 资源管理器资源管理器 = 新资源管理器(); 资源模板Resource = resourceManager.createDirectly(templateBytes, MasterReport.class); return (MasterReport) templateResource.getResource(); 私有 void addParametersToReport(Map params, MasterReport reportData) 如果(参数!= null) 对于(字符串键:params.keySet()) reportData.getParameterValues().put(key, params.get(key)); 私有字节[] generateReport(MasterReport reportData) 抛出 ReportProcessingException ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); PdfOutputProcessor outputProcessor = new PdfOutputProcessor(reportData.getConfiguration(), outputStream, reportData.getResourceManager()); AbstractReportProcessor reportProcessor = null; 尝试 reportProcessor = new PageableReportProcessor(reportData, outputProcessor); reportProcessor.processReport(); 最后 如果(报告处理器!= null) 报告处理器.close(); 返回 outputStream.toByteArray();
generateReport 方法在 templateBytes 参数中接受 .prpt 文件的内容,在 params 参数中接受生成报告所需的参数列表。
它返回的字节数组包含生成的 PDF 报告的内容。
此外,如果您将 Maven 用于您的应用程序,那么包含所有必要的依赖项也很重要。我使用了在此处找到的列表:http://wiki.pentaho.com/display/Reporting/How+to+integrate+report+designer+to+your+web+application,并在其中将所有与 pentaho 相关的库版本替换为 6.1.0.1-196 版本
【讨论】:
【参考方案2】:我已经成功地将 Pentaho Reporting Engine 嵌入到我的 Java 应用程序中。有一个包含必要库和示例的教程。开始时唯一需要考虑的是使用相同版本的 Pentaho SDK、Pentaho Reporting Engine 和 Pentaho Report Designer,以免出现数据源问题。如果你不想要依赖关系的麻烦,你可以下载 Pentaho Report Designer 并将所有的库拖放到你的 web 应用程序中(大多数问题是在你尝试使用 pentaho 图表时出现的,它们都是通过这种方式解决的)。
Pentaho 官方文档:
http://infocenter.pentaho.com/help/index.jsp?topic=%2Freporting_embedders_guide%2Ftopic_embedding_engine.html
Pentaho Reporting Classic Engine Core(最好先试试这个):
http://sourceforge.net/projects/jfreereport/files/01.%20Classic%20Engine/
只需导入 IDE 中的所有库(我使用的是 Eclipse Helios),并使用提供的示例,它就可以作为一个魅力!然后,您可以根据需要开始对其进行修改。我建议您查看如何处理报告的路径。
【讨论】:
嗨 Cho Cho,我能够成功地将 pentaho 报告与我的应用程序集成。带有表格数据的报告生成良好,但无法获取带有饼图或条形图的报告。我是否需要添加更多其他更改> Praneeth,将这些 jars 添加到您的项目中:“legacy-charts”、“jfreechart”和“jcommon”。请务必匹配相同版本的 PRD 和 Reporting Engine。您可以在 Report Designer 路径的 lib 文件夹中找到这些 jar。不要忘记,匹配相同的版本(例如,PRD 5.1.0 和 Reporting Engine 5.1.0)link【参考方案3】: final FacesContext context = FacesContext.getCurrentInstance();
ClassicEngineBoot.getInstance().start();
try
// load report definition
ResourceManager manager = new ResourceManager();
manager.registerDefaults();
ExternalContext extContext = context.getExternalContext();
String reportPath = "file:" + extContext.getRealPath("name/name.prpt");
Resource res = manager.createDirectly(new URL(reportPath), MasterReport.class);
MasterReport report = (MasterReport) res.getResource();
................
................
httpServletResponse.setContentType("application/rtf");
httpServletResponse.setHeader("Content-Disposition", "attachment; filename=\"name.rtf\"");
RTFReportUtil.createRTF(report, httpServletResponse.getOutputStream());
FacesContext.getCurrentInstance().responseComplete();
catch (ReportProcessingException ex)
【讨论】:
请说明您的代码的作用以及它如何回答问题。如果您得到一个代码 sn-p 作为答案,您可能不知道如何处理它。答案应为 OP 提供有关如何调试和解决问题的指导。指出您的代码背后的想法是什么,极大地有助于理解问题并应用或修改您的解决方案。此外,您的回答似乎只回答了部分问题。 有一个项目 - github.com/tmorgner/pentaho-reporting-oem-sdk 与 pentaho-reporting 作者 cmets 共享了很多报告示例以上是关于.prpt 报告从 java 运行的主要内容,如果未能解决你的问题,请参考以下文章