65.9K
CodeProject 正在变化。 阅读更多。
Home

将 BIRT 报告与 PHP 网站集成

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2011 年 8 月 24 日

CPOL

4分钟阅读

viewsIcon

45712

如何通过 PHP 使用 BIRT 创建的报告

 

介绍 

考虑到当前危机中的困难,以及开源编程语言、技术和工具的演进,在选择特定解决方案的技术时,开始考虑这些选项非常重要。

本文介绍了 Eclipse BIRT,并解释了如何将其报表集成到 PHP 网站中,以便您可以轻松、免费地实现。

背景

Eclipse BIRT - **B**usiness **I**ntelligence and **R**eporting **T**ools (BIRT) 是一个报表系统,您可以将其集成到大家熟知的 Eclipse IDE 中。您可以生成各种解决方案,但在本文中,重点是将在 PHP 网站上使用生成的报表(这是一个常见需求,通常使用其他技术实现)。如果您了解 Microsoft SQL Reporting Services 等其他技术,您会发现这个工具非常简单直接。

更多关于 BIRT 的信息:http://www.eclipse.org/birt/phoenix/

正如有时会发生的那样,您想在网站上调用一个报表。如果您曾经在 ASP.Net 网站上使用过 RDLC 文件,或者 Crystal Reports 报表,那么我们在这里想做同样的事情,但这需要一些技能和特定的操作顺序才能使其正常工作。

首先,我使用了 XAMPP 来编写本文,它以一种您可以随时启动和停止的简单方式打包了 Apache 和 MySql(以及其他服务器)。您可以不使用它来实现,但我强烈推荐这个工具。下载地址:http://www.apachefriends.org/en/xampp.html

这似乎是一个非常简单的方法,但事实并非如此!这里有两个主要挑战:

a) 遵循一套非常具体的步骤来使一切正常工作(安装程序、SDK、配置…)

b) 由于 BIRT 在 Java 中运行,而您想在 PHP 中使用它,所以必须有东西让它们互相“通信”。这里就引入了 PHP JavaBridge,它将 PHP 或 Python 等原生脚本语言连接到 Tomcat 等 Java 服务。这将是我们的翻译器。

第一步是组装您的环境。在这里,您将安装一些软件、SDK,进行配置,复制粘贴文件夹……这可能需要几个小时才能正确完成。

1. 前期准备
1.1. Java 运行时和 SDK


2. 需要安装的软件
2.1. 您需要激活 Tomcat。XAMPP 自带安装,但是,在开始之前,请在您的 Windows XP 上设置环境变量
JAVA_HOME 指向 java SDK 目录。这需要重启电脑。之后,转到 <Xampp 文件夹>\tomcat 并按 Catalina_start.bat 启动 tomcat
2.2. 下载 PHP/Java bridge(地址:http://php-java-bridge.sourceforge.net/pjb/download.php - 选择“Documentation”版本)。将 JavaBridge.war 文件粘贴到 <Xampp 文件夹>\tomcat\webapps,并在 http://127.0.0.1:8081/JavaBridge/ 检查安装情况。
2.3. 安装 Commons Logging(下载地址:http://commons.apache.org/logging/download_logging.cgi - 下载 Binaries,选择版本.zip)。将 .jar 文件复制到 <Xampp 文件夹>\tomcat\webapps\birt-viewer\WEB-INF\lib\
2.4. 安装 BIRT Runtime(下载地址:http://download.eclipse.org/birt/downloads/,找到“Latest BIRT runtime Release Build”)- 将 WebViewerExample 文件夹复制到 <Xampp 文件夹>\tomcat\webapps\ 并将其重命名为 Birt-Viewer。
2.5. 在 XAMPP 中启动 Apache;
2.6. 在 <Xampp 文件夹> 中通过执行 catalina_start.bat 启动 Tomcat。
2.7. 测试 tomcat:https://:8080/ (如果显示 tomcat 的一些信息,说明正常)
2.8. 测试 JavaBridge:https://:8080/JavaBridge (如果显示 javabridge 的一些信息,说明正常)
 

 

此时,您应该已经成功配置了环境,并且 BirtViewer 和 JavaBridge 都已安装并运行。现在您已准备好使用 PHP 代码了。

使用代码

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

 

现在,只需在 Apache 中创建一个新的网站(不要在 tomcat 中)。请记住启动 tomcat 服务!!

通过 Birt Viewer 调用,我使用了 BirtViewer 随附的 TopNPercent 报表。

<?php
		
   //	1. Http request
			
  $fname = "TopNPercent.rptdesign"; // name of the report
  $topCount = 5;	//	Top Count parameter
  $topPercentage = 25;	//	Top Percentage parameter
				
  // Redirect browser
  $dest = "https://:8081/birt-viewer/frameset?__report=";
  $dest .= urlencode( realpath( $fname ) );
  $dest .= "&Top Count=" . urlencode( $topCount );
  $dest .= "&Top Percentage=" . urlencode( $topPercentage );
				
  header("location: ".$dest);
			

?>
		

通过 JavaBridge 直接调用,使用相同的报表。

 

	
<?php		
  //	2.	Local file using BIRT runtime engine
			
  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 Count", 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 年微软技术咨询经验的顾问,我发现自己可以顺利地处理这些解决方案。第一次总是需要更长的时间,但一旦一切都组装好了,就和使用其他技术一样容易。

尝试一下,它很值得。如果您想花更少的钱做同样的事情,这就是您的答案。

 

注意:如果您想将 BIRT 与 MySql 集成,默认没有安装驱动程序。请遵循以下说明:http://www.slideshare.net/vazi/birt-installation-and-configuration

历史 


 

© . All rights reserved.