.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, Map params) 抛出异常 
    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 运行的主要内容,如果未能解决你的问题,请参考以下文章

导出到 Pentaho 报告结果到 csv 或 excel

运行黄瓜并生成没有maven / gradle插件的html报告

20165210 Java第五次实验报告

java第三次实验报告

从 Java 程序访问 OBIEE 中的报告

java语法基础报告