在考虑为特定解决方案选择技术时,了解各种编程语言、技术和工具是至关重要的。本文将介绍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目录。这需要重启计算机。之后,转到
2.2. 下载PHP/Java桥(在下载 - “Documentation”版本。将JavaBridge.war文件粘贴到
2.3. 安装Commons Logging(在下载 - Binaries,version.zip)。将.jar文件复制到
2.4. 安装BIRT运行时(在下载,找到“Latest BIRT runtime Release Build”)- 将WebViewerExample文件夹复制到
2.5. 在XAMPP中启动Apache;
2.6. 在
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技术经验的顾问,发现自己在没有太多问题的情况下使用这些解决方案。“第一次”需要更长的时间,但在组装好之后,就像其他技术一样简单。
试试看,这是值得的。如果想以更少的钱实现相同的效果,这就是答案。