BMS-HOSxP Community

HOSxP => Admin tools => ข้อความที่เริ่มโดย: doramon ที่ กรกฎาคม 01, 2010, 11:42:20 AM

หัวข้อ: web PHP รัน iReport ได้นะครับ
เริ่มหัวข้อโดย: doramon ที่ กรกฎาคม 01, 2010, 11:42:20 AM
web  PHP  รัน   iReport   ได้นะครับ   


การทำ iReport + PHP นี้จะทำไม่ได้ถ้าไม่มี JavaBridge มาช่วยนะครับ
สำหรับ JavaBridge ที่ผมแนะนำก็ตัวนี้เลยครับ OpenSource


http://php-java-bridge.sourceforge.net/pjb/


หลังจากติดตั้งเสร็จก็ลงมือทำ Report ใน iReport Designer ได้เลยตามปกตินะครับ
ส่วนนี้ไม่ยากคิดว่าคงทำ Report เป็นอยู่แล้ว

โค๊ด: Java
  1.  
  2. <?php
  3. /**
  4.  * อันนี้เป็นตย.จากเว็บต้นฉบับครับ
  5.  * see if the java extension was loaded.
  6.  */
  7. function checkJavaExtension()
  8. {
  9.         if(!extension_loaded('java'))
  10.         {
  11.                 $sapi_type = php_sapi_name();
  12.                 $port = (isset($_SERVER['SERVER_PORT']) && (($_SERVER['SERVER_PORT'])>1024)) ? $_SERVER['SERVER_PORT'] : '8080';
  13.                 if ($sapi_type == "cgi" || $sapi_type == "cgi-fcgi" || $sapi_type == "cli")  
  14.                 {
  15.                         if(!(PHP_SHLIB_SUFFIX=="so" && @dl('java.so'))&&!(PHP_SHLIB_SUFFIX=="dll" && @dl('php_java.dll'))&&!(@include_once("java/Java.inc"))&&!(require_once("http://127.0.0.1:$port/java/Java.inc")))  
  16.                                 if(!(require_once("./java/Java.inc")))  
  17.                         {
  18.                                 return "java extension not installed.";
  19.                         }
  20.                 }  
  21.                 else
  22.                 {
  23.                         if(!(@include_once("java/Java.inc")))
  24.                         {
  25.                                 require_once("http://127.0.0.1:$port/java/Java.inc");
  26.                         }
  27.                 }
  28.         }
  29.         if(!function_exists("java_get_server_name"))  
  30.         {
  31.                 return "The loaded java extension is not the PHP/Java Bridge";
  32.         }
  33.  
  34.         return true;
  35. }
  36.  
  37. /**  
  38.  * convert a php value to a java one...  
  39.  * @param string $value  
  40.  * @param string $className  
  41.  * @returns boolean success  
  42.  */  
  43. function convertValue($value, $className)  
  44. {  
  45.         // if we are a string, just use the normal conversion  
  46.         // methods from the java extension...  
  47.         try    
  48.         {  
  49.                 if ($className == 'java.lang.String')  
  50.                 {  
  51.                         $temp = new Java('java.lang.String', $value);  
  52.                         return $temp;  
  53.                 }  
  54.                 else if ($className == 'java.lang.Boolean' ||  
  55.                         $className == 'java.lang.Integer' ||  
  56.                         $className == 'java.lang.Long' ||  
  57.                         $className == 'java.lang.Short' ||  
  58.                         $className == 'java.lang.Double' ||  
  59.                         $className == 'java.math.BigDecimal')  
  60.                 {  
  61.                         $temp = new Java($className, $value);  
  62.                         return $temp;  
  63.                 }  
  64.                 else if ($className == 'java.sql.Timestamp' ||  
  65.                         $className == 'java.sql.Time')  
  66.                 {  
  67.                         $temp = new Java($className);  
  68.                         $javaObject = $temp->valueOf($value);  
  69.                         return $javaObject;  
  70.                 }  
  71.         }  
  72.         catch (Exception $err)  
  73.         {  
  74.                 echo (  'unable to convert value, ' . $value .  
  75.                                 ' could not be converted to ' . $className);  
  76.                 return false;  
  77.         }
  78.    
  79.         echo (  'unable to convert value, class name '.$className.  
  80.                         ' not recognised');  
  81.         return false;  
  82. }
  83.  
  84. error_reporting(E_ALL);
  85. checkJavaExtension();
  86.  
  87. /* Inherits JasperReport Compiler Class */
  88. $compileManager = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager");
  89. $report = $compileManager->compileReport(realpath("aaaa.jrxml"));
  90.  
  91. /* Inherits JasperFillManager */
  92. $fillManager = new JavaClass("net.sf.jasperreports.engine.JasperFillManager");
  93.  
  94. /* Parameter defining */
  95. $params = new Java("java.util.HashMap");
  96. //ในกรณีที่เราจะส่ง Parameter ให้ Report ให้สร้าง HashMap เพื่อส่งให้กับ Report แบบนี้นะครับ
  97.  
  98. $params->put("text", "Text");
  99. $params->put("number", 3.00);
  100. $params->put("date", convertValue("2007-12-31 0:0:0", "java.sql.Timestamp"));
  101.  
  102. /* get database JDBC connection */
  103. //ตรงนี้เป็นการ Get JDBC Connection เพื่อทำการ Fill Data Source ให้กับ Report นะครับ ใน ตย.นี้เป็น MSSQL นะครับ
  104. $class = new JavaClass("java.lang.Class");
  105. $class->forName("net.sourceforge.jtds.jdbc.Driver");
  106. $driverManager = new JavaClass("java.sql.DriverManager");
  107. $conn = $driverManager->getConnection("jdbc:jtds:sqlserver://quetzalcoatl/DBXXXX;user=sa;password=xxxx");
  108.  
  109. // อันนี้เป็นกรณีที่จะใช้ Empty Data Source
  110. /*$emptyDataSource = new JavaClass("net.sf.jasperreports.engine.JREmptyDataSource");*/
  111. // อันนี้เป็นกรณีที่ใช้ JDBC Connection นะครับ
  112. $jasperPrint = $fillManager->fillReport($report, $params, $conn);
  113.  
  114. //สร้าง output เป็น PDF File แต่สามารถใช้ Export Manager ตัวอื่นก็ได้นะครับ
  115. $filename = uniqid('Report_');
  116. $outputPath = realpath(".")."/"."{$filename}.pdf";
  117.  
  118. $exportManager = new JavaClass("net.sf.jasperreports.engine.JasperExportManager");
  119. $exportManager->exportReportToPdfFile($jasperPrint, $outputPath);
  120.  
  121. header("Content-type: application/pdf");
  122. readfile($outputPath);
  123. unlink($outputPath);
  124.  
  125. ?>
  126.  
  127.  


ปล. การ Load JavaBridge ในตย.นี้จะ Deploy PHP Source ไว้ใน Tomcat ให้เราไปใช้ Include ผ่าน URL
ซึ่งจะไม่ผ่านในกรณีที่ใช้ Share host แต่สามารถเอา PHP Source มาวางใน Apache แล้ว Include ตรงๆ ก็ได้ครับ

ปล2. ควรเขียน Java เป็น อย่างน้อยควรรู้วิธีการทำงานของ Servlet Container เช่น Tomcat นะครับ
หัวข้อ: Re: web PHP รัน iReport ได้นะครับ
เริ่มหัวข้อโดย: atiwat24 ที่ มิถุนายน 10, 2013, 12:19:36 PM
สอนหน่อยได้ไหมครับ ใช้ centos +apache ตอนนี้ติดตั้ง JavaBridge ไม่ได้ครับ :) :) :)