Eclipse BIRT集成到PHP网站的方法

在考虑为特定解决方案选择技术时,了解各种编程语言、技术和工具是至关重要的。本文将介绍Eclipse BIRT,并解释如何将其报告集成到PHP网站中,以便可以轻松且免费地实现这一目标。

Eclipse BIRT(Business Intelligence and Reporting Tools)是一个报告系统,可以与知名的Eclipse IDE集成。可以生成多种解决方案,但本文的重点是将生成的报告用于PHP网站(通常使用其他技术实现的常见需求)。如果熟悉Microsoft SQL Reporting Services或Crystal Reports等其他技术,会发现这个工具非常简单直观。

环境搭建

本文以XAMPP为例,XAMPP将Apache和MySQL(以及其他服务器)打包在一起,使可以随意启动和停止。虽然可以不使用它,但强烈推荐这个工具。

要实现这一目标,需要遵循一系列特定的步骤(安装程序、SDK、配置...),因为BIRT运行在Java上,而希望在PHP中使用它,所以必须有一些东西使它们能够相互“通信”。这里引入了PHP JavaBridge,它将原生脚本语言(如PHP或Python)连接到Java服务(如Tomcat)。这将是翻译器。

在这里,将安装一些软件、SDK,进行配置,复制和粘贴文件夹...这可能需要几个小时才能正确完成。

1.1. Java运行时和SDK

2.1. 需要激活Tomcat。XAMPP中已经预装了它,但在开始之前,需要在Windows XP上设置环境变量JAVA_HOME到Java SDK目录。这需要重启计算机。之后,转到\tomcat并运行Catalina_start.bat启动Tomcat。

2.2. 下载PHP/Java桥(在下载 - “Documentation”版本。将JavaBridge.war文件粘贴到\tomcat\webapps并检查安装情况:)

2.3. 安装Commons Logging(在下载 - Binaries,version.zip)。将.jar文件复制到\tomcat\webapps\birt-viewer\WEB-INF\lib\

2.4. 安装BIRT运行时(在下载,找到“Latest BIRT runtime Release Build”)- 将WebViewerExample文件夹复制到\tomcat\webapps\并重命名为Birt-Viewer。

2.5. 在XAMPP中启动Apache;

2.6. 在中启动Tomcat,执行catalina_start.bat;

2.7. 测试Tomcat:(如果显示Tomcat,则表示正常);

2.8. 测试JavaBridge:(如果显示javabridge,则表示正常)。

此时,应该已经有一个运行中的环境,BirtViewer和JavaBridge都已安装并运行。现在可以使用PHP代码了。

使用代码

有两种方式来使用代码 - 一种通过Birt Viewer,另一种直接通过JavaBridge。通过Birt Viewer,可以通过http来使用报告,结果将是报告以及打印、导出等选项...但必须意识到安全问题,因为需要能够从Web访问报告的URL。通过JavaBridge,直接访问文件(不通过http),所以渲染的是简单的HTML。但是,没有打印和导出选项...

现在在Apache上创建一个新的网站(不在Tomcat上)。记得要启动Tomcat服务!

使用了BirtViewer自带的TopNPercent报告:

<?php // Http请求 $fname = "TopNPercent.rptdesign"; // 报告名称 $topCount = 5; // Top Count参数 $topPercentage = 25; // Top Percentage参数 // 重定向浏览器 $dest = "http://localhost:8081/birt-viewer/frameset?__report="; $dest .= urlencode(realpath($fname)); $dest .= "&Top Count=". urlencode($topCount); $dest .= "&Top Percentage=". urlencode($topPercentage); header("location: ".$dest); ?>

使用相同的报告:

<?php // 本地文件使用BIRT运行时引擎 if (!(get_cfg_var('java.web_inf_dir'))) { define('JAVA_HOSTS', '127.0.0.1:8081'); define('JAVA_SERVLET', '../../tomcat/webapps/JavaBridge/JavaBridge.phpjavabridge'); } $pth = "http://". $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"]; $path_parts = pathinfo($pth); $imageURLPrefix = $path_parts['dirname'] . "/images/"; require_once("../../tomcat/webapps/JavaBridge/java/Java.inc"); session_start(); $here = getcwd(); $ctx = java_context()->getServletContext(); $birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx); java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook()); try { $report = $birtReportEngine->openReportDesign("${here}/TopNPercent.rptdesign"); $task = $birtReportEngine->createRunAndRenderTask($report); $task->setParameterValue("Top Count", new java("java.lang.Integer", 6)); $task->setParameterValue("Top Percentage", new java("java.lang.Integer", 6)); $taskOptions = new java("org.eclipse.birt.report.engine.api.HTMLRenderOption"); $outputStream = new java("java.io.ByteArrayOutputStream"); $taskOptions->setOutputStream($outputStream); $taskOptions->setOutputFormat("html"); $ih = new java("org.eclipse.birt.report.engine.api.HTMLServerImageHandler"); $taskOptions->setImageHandler($ih); $taskOptions->setEnableAgentStyleEngine(true); $taskOptions->setBaseImageURL($imageURLPrefix . session_id()); $taskOptions->setImageDirectory($here . "/images/" . session_id()); $task->setRenderOption($taskOptions); $task->run(); $task->close(); } catch (JavaException $e) { echo $e; // "Error Calling BIRT"; } echo $outputStream; ?>

注意事项

这里的问题是组装一切。如果没有指导线,很容易安装错误。上述步骤花了一个多星期的时间,并且搜索了很多(真的很多),但认为它们会为节省很多麻烦和时间(所以希望如此)。

作为一个有5年使用Microsoft技术经验的顾问,发现自己在没有太多问题的情况下使用这些解决方案。“第一次”需要更长的时间,但在组装好之后,就像其他技术一样简单。

试试看,这是值得的。如果想以更少的钱实现相同的效果,这就是答案。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485