好吧,我正在通过Tomcat 6服务器构建我的应用程序项目。作为我自己的应用程序打包为 war 文件,我已将整个 BIRT 4.2 引擎包含在其中,现在可以在那里生成我的自定义报告。 BIRT运行时环境依赖项使我的 war 文件部署成长大约20 MB。
然而,最近我发现BIRT已将its standalone runtime打包为 war 文件(也称为BIRT查看器),我现在用它来测试我以pdf格式创建的报告。它使用起来非常简单,它只需要报告文件值及其参数,您将其作为 GET 请求传递。它在查看器中显示报告,您也可以从中查看报告。
我的问题是,在我的应用程序请求下载以让独立运行时管理它时,我可以通过哪种方式集成我自己的应用程序和运行时?这也涉及安全性,因为我不希望我的应用程序中的每个用户都能够下载所有可用的报告。
现在可以吗?
答案 0 :(得分:1)
据我了解,您需要将应用程序与BIRT运行时查看器集成,以便您可以在应用程序中生成报告,但由后端的BIRT Viewer提供支持。以下是步骤
先决条件 -
我在here
我在这里提取了它,并称之为BIRT_VIEWER_HOME org.eclipse.birt-BIRT_4_2_2_RC2_201301291123 \观察者\ 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中部署时,它将创建一个目录结构 \ web应用\ yourapplication \ web内容
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)根据某些点击或任何其他条件,使用此网址设置此iframe的src 报告=报告/“&GT; HTTP:// LOCALDOMAIN:端口/ yourapplication /框架_report =报告/&安培; __format = PDF
例如。我使用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的Filter机制来检查BIRT查看器URL,看看它是否被经过身份验证或有会话的人访问。
更新:
如果您想要一个中央BIRT执行点,请创建一个批处理文件,从Java调用该文件传递参数,然后从生成的位置获取报告。这样,它通过命令提示符和Java / Tomcat很有用。以下步骤
创建一个批处理文件,比如report.bat并在那里添加此代码。地点 classpath中的所有BIRT罐子。我将省略设置值 简洁的变量
%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%
通过从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代码从那里加载它。
如果您需要详细说明,请参阅this link。
答案 1 :(得分:0)
一个解决方案是放弃birt.war并将BIRT称为单独的java进程,使用birt-runtime下载的ReportEngine子目录中的脚本Executing a Java application in a separate process
我的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
答案 2 :(得分:0)
我最终决定建立自己的servlet,它提供基于REST服务的报告。这样,您可以通过URL处理所需的模板/参数。
作为开源git项目发布,您可以查看它here。每个人都被邀请改进它,欢迎新的通勤者。