在现有的 webapp 中集成 BIRT
Posted
技术标签:
【中文标题】在现有的 webapp 中集成 BIRT【英文标题】:Integrate BIRT in existing webapp 【发布时间】:2012-02-17 07:52:27 【问题描述】:我想将 BIRT 报告引擎添加到 Tomcat 中的现有 web 应用程序中。我不需要 BIRT 查看器,我真的只想能够从像 http://localhost:8080/birt/output?__report=test.rptdesign&sample=my+parameter
这样的 URL 运行报告并使用不同的导出选项 pdf、xls、doc、html。
到目前为止,我发现的集成指南都包括查看器和编写我自己的 servlet 来处理不同的格式。
我希望有人知道我需要的报告引擎 web.xml 文件中的哪些 servlet 映射,以及我需要从 lib 目录中包含哪些 jar,以便在现有的 web 应用中实现这个准系统 BIRT。
【问题讨论】:
【参考方案1】:我希望有人知道哪些 servlet 映射来自 我需要的报告引擎 web.xml 文件以及我需要哪些 jars 包含在这个准系统 BIRT 实现的 lib 目录中 在现有的 webapp 中。
我不一定想编写自己的 servlet 我只是想将现有的报告运行时从它自己的独立 web 应用程序(here 在“运行时”按钮下)集成到我现有的 web 应用程序中,所以我不必须分发 2 个 webapps 来支持运行 BIRT 报告。抱歉,如果没有更清楚。
我确实以最简单的方式解决了这个问题,以防有人有类似的问题(使用 BIRT 运行时 3.7.1):
您只需将以下 servlet 映射添加到您自己的 webapp\web-inf\web.xml
文件中:
<!-- Engine Servlet -->
<servlet>
<servlet-name>EngineServlet</servlet-name>
<servlet-class>org.eclipse.birt.report.servlet.BirtEngineServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EngineServlet</servlet-name>
<url-pattern>/output</url-pattern>
</servlet-mapping>
将runtime 的web-inf\lib
目录中的所有 jar 包含到您自己的webapp\web-inf\lib
目录中。
然后,您可以使用您自己的 web 应用程序中的 output
BIRT 报告 URL 运行 .rptdesign 文件,并指定您想要的任何格式,例如:
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=pdf
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=html
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=xls
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=doc
http://localhost:8080/myOwnWebapp/output?__report=test.rptdesign&__format=ppt
【讨论】:
很棒的答案,感谢 Stack Overflow。完整且完全符合要求。干得好。 这适用于 Tomcat 7 中的 BIRT 4.3.2。它不适用于 Jetty 3.7.1 或 4.3.2。【参考方案2】:据我了解,您正在尝试从 servlet 生成 birt 报告,其中您在某个位置有 *.rptdesign。
好,看下面的代码
this.bundle = ResourceBundle.getBundle("com.tts.mersal.resources.MersalResources");
this.config = new EngineConfig();
this.config.setEngineHome(bundle.getString("BIRT_ENGINE_HOME"));
this.config.setLogConfig(bundle.getString("BIRT_LOGGING_FOLDER_PATH"), Level.ALL);
Platform.startup(config);
this.factory = (IReportEngineFactory)Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
this.engine = factory.createReportEngine( config );
this.engine.changeLogLevel(Level.ALL);
ContentReader contentReader = Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getFileFolderService().getReader(MersalOutboundReportDialogBean.this.dialogReportNode.getNodeRef());
IReportRunnable report = MersalOutboundReportDialogBean.this.getEngine().openReportDesign(contentReader.getContentInputStream());
ReportDesignHandle designHandle = (ReportDesignHandle)report.getDesignHandle();
OdaDataSource source = (OdaDataSource)designHandle.getModule().findDataSource(DATA_SOURCE_NAME);
source.setProperty(source.getPropertyDefn("FILELIST"), buildUrl((String)source.getProperty(designHandle.getModule(), "FILELIST")));
IRunAndRenderTask runAndRenderTask = MersalOutboundReportDialogBean.this.getEngine().createRunAndRenderTask(report);
HTMLRenderOption render = new HTMLRenderOption();
render.setOutputFileName("G:/Render.html");
render.setOutputFormat("html");
runAndRenderTask.setRenderOption(render);
runAndRenderTask.run();
runAndRenderTask.close();
正如您所看到的第一件事,您必须准备 birt 引擎,然后从 IReportRunnable 类型中获取报告实例,因此您可以在之后使用将根据您的请求更改的render 选项设置输出的位置.
您有多种选择,HTMLRenderOption、PDFRenderOption 等。
希望对您有所帮助。
谢谢。
【讨论】:
谢谢你,我主要是想将现有的运行时集成到我自己的 webapp 中。对不起,如果这不是更清楚。我在下面解决了这个问题。以上是关于在现有的 webapp 中集成 BIRT的主要内容,如果未能解决你的问题,请参考以下文章
如何在 React WebApp 中集成 OpenCV.js?