2

好吧,我正在 Tomcat 6 服务器上构建我的应用程序项目。作为我自己的打包为war文件的应用程序,我将整个BIRT 4.2引擎包含在其中,现在可以在其中生成我的自定义报告。BIRT 运行时环境的依赖让我大吃一惊文件增大了大约 20 MB。

然而,最近我发现 BIRT 将其独立运行时也打包为一个war文件(也称为 BIRT 查看器),我现在用它来测试我以 pdf 格式创建的报告。它使用起来非常简单,只需要报告文件值及其参数,您可以将它们作为GET请求传递。它在查看器中显示报告,您也可以从中下载它们。

我的问题是,当我的应用程序请求下载以让独立运行时管理它时,我可以通过哪种方式集成我自己的应用程序和运行时?这也涉及安全问题,因为我不希望我的应用程序中的每个用户都能够下载所有可用的报告。

现在有可能吗?

4

3 回答 3

1

据我了解,您需要将您的应用程序与 BIRT 运行时查看器集成,以便您可以从应用程序中生成报告,但由后端的 BIRT 查看器提供支持。以下是步骤

先决条件 -

  • 我从这里使用了 4.2.2 的 src

  • 我在这里提取了它,并称之为 BIRT_VIEWER_HOME org.eclipse.birt-BIRT_4_2_2_RC2_201301291123\viewer\org.eclipse.birt.report.viewer\

1) 将 web.xml 的所有内容从 BIRT 查看器复制到应用程序的 web.xml。Birt Viewer 的 web.xml 可以在这里找到 - BIRT_VIEWER_HOME\birt\WEB-INF

2) 复制 BIRT_VIEWER_HOME\birt\ 下的 webcontent 文件夹,并将其放在应用程序的根文件夹中。所以在tomcat中部署的时候,会创建一个目录结构\webapps\yourapplication\webcontent

3)创建一个jsp页面,里面有一个iframe。例如。具有此内容的report.jsp

<iframe src="" id="birtViewer" name="birtViewer" frameborder="0" 
    scrolling="no" class="reportframe" 
    style="height:600px;margin:0px;padding:0px;" />

请注意,我已将 src 保留为空,因此最初 iframe 不会加载任何内容

3) 根据一些点击或任何其他条件,使用此 URL report=reports/">http://localdomain:port/yourapplication/frameset?_report=reports/&__format=pdf 设置此 iframe 的 src

例如。我使用 JQuery 的实现。

$(document).ready(function(){
    var url;
    if(someCondition)
    {
        url = "frameset?__report=reports/testreport.rptdesign&__format=pdf";
    }
    else
    {
        url = "dummyPage.jsp";
    }

    $("#birtViewer").attr('src',url);//setting the src for iframe
})

4) 这将使用此报告的 BIRT 参数加载 iframe。

5)您可以填写所有参数并点击“确定”按钮。报告将在此 iframe 中生成。

我宁愿让你处理安全方面的问题。一个简单的安全措施是使用 tomcat 的过滤器机制来检查 BIRT Viewer URL 并查看它是否被经过身份验证或有会话的人访问。

更新:

如果您想要一个中央 BIRT 执行点,请创建一个批处理文件,从 Java 调用它并传递参数,然后从生成的位置获取报告。这种方式通过命令提示符和 Java/Tomcat 很有用。下面的步骤

  1. 创建一个批处理文件,比如 report.bat 并在其中添加此代码。将所有 BIRT jar 放在类路径中。为简洁起见,我将省略设置变量的值

    %JAVACMD% -Dlog4j.configuration="file:%APP_HOME%/conf/log4j.properties" 
    -cp "%CP%" -Djava.util.logging.config.file=%APP_HOME%/conf/birtlogger.properties 
    org.eclipse.birt.report.engine.api.ReportRunner %p1% %p2% %p3% %p4% %p5%
    
    • %APP_HOME%/reports 是我放置设计的地方。您可以动态传递它。
    • p1 到 p5 是我传递给 Report Runner 的 5 个参数。不过,您可以传递任意数量的参数。
  2. 通过从 Java/Tomcat 调用它来运行报告。请参考@Adam 的回答。

    report.bat -f pdf -p "p1=paramValue1" -p "p2=paramValue2" -p 
    "p3=paramValue3" -p "p4=paramValue4" -p "p5=paramValue5" -o     
    %APP_HOME%\myreportfolder\NameofMyReport.pdf %APP_HOME%\NameofMyReport.rptdesign
    

您将获得在 %APP_HOME%\myreportfolder 中生成的报告 NameofMyReport.pdf。指向您的 java 代码以从那里加载它。

如果您需要详细说明,请参阅此链接。

于 2013-10-01T13:58:26.997 回答
0

一种解决方案是放弃 birt.war 并将 BIRT 作为单独的 java 进程调用,使用 birt-runtime 下载的 ReportEngine 子目录中的脚本,通过在单独的进程中执行 Java 应用程序

我的 J2EE 有点生疏,但除此之外,@Thomas 有很好的说明,用于使用自定义 viewservlets.jar 重建 birt.war 文件。看起来这里可能有一些较旧的说明:

http://wiki.eclipse.org/BIRT/FAQ/Birt_Project#Q:_How_do_I_build_the_2.2.2F2.3.2F2.5_BIRT_Viewer.3F

于 2013-10-01T15:12:40.033 回答
0

我最终决定建立自己的 servlet,它提供基于 REST 服务的报告。这样,您可以通过 URL 处理所需的模板/参数。

作为开源 git 项目发布,您可以在这里查看。邀请每个人改进它,并欢迎新的提交者。

于 2014-07-02T21:56:17.040 回答