Pengenalan
Persoalan biasa di fikiran programmer web dan
khususnya programmer open sources adalah untuk menghasilkan laporan yang
pantas, format pdf, boleh design seperti aplikasi oracle report builder,
aplikasi crystal report untuk keluarga windows, ada unsur graf, menjana
invoice, receipt, matrix report dan sebagainya. Memang sukar jika tiada
designer khusus yang berbentuk wizard untuk melakar atau mendesign
laporan yang dikehendaki dengan pantas .
Bagaimana anda ingin membangunkan laporan yang
diakses oleh bahasa aturcara
Apa yang perlu anda
ada ?
Anda
perlu mendapatkan perisian seperti yang berikut :-
a.
iReport versi terkini yang boleh dimuatturun secara percuma dari laman
web http://jasperforge.org/projects/ireport
b.
Xampp yang di add on dengan tomcat (melarikan aturcara java bersama php)
yang boleh dimuatturun melalui laman web
(Versi XAMPP 1.7.7
ke atas sudah ada feature untuk add on tomcat)
c.
Oracle jdbc driver untuk ireport (ojdbc6) yang support untuk oracle db
11g dan ia boleh di dapati dari laman web :
LANGKAH 1 : INSTALASI
DAN KONFIGURASI Ireport
1. Setelah perisian ini didownload, anda perlu runkan
setup dan ikut arahan sehingga selesai
2. Selepas proses install selepas, anda perlu membuka
aplikasi ini dan paparan adalah seperti yang di bawah :
3. Untuk mendapatkan connection dengan pangkalan data
oracle, aplikasi ini memerlukan driver oracle jdbc untuk ditambah sebagai
library. Justeru itu, driver oracle jdbc yang telah dimuatturun dalam langkah
awal tadi perlu diletakkan di dalam folder \libs
iaitu seperti “D:\iReport-4.1.3\ireport\libs”.
4. Selepas itu, anda perlu menambah file oracle jdbc
(jar) ini melalui menu tools>Options>
dan seterus tekan butang “Add Jar” untuk mencari fail oracle jdbc yang
telah dimuaturun tadi.Ikut langkah sehingga selesai.
5. Untuk memastikan anda sudah ada connection dengan oracle, anda boleh
membina satu laporan yang ringkas iaitu melalui menu File > New >Select Template Report >Report Name (path) >
Query.Anda perlu membina connection baru dengan klik pada butang “New” >
Database JDBC connection >Next> dan pilihan senarai nama driver oracle
(warna hitam). Jika senarai warna merah bermaksud belum ada fail driver lagi:
6.
Seterusnya,masukkan maklumat untuk akses ke oracle seperti berikut :-
7.
Sila tekan butang “test”
connection untuk menguji sama ada connection ke oracle berjaya atau tidak dan
ikuti langkah hingga selesai.
8.
Seterusnya anda sudah boleh membina laporan yang mana data diakses
daripada pangkalan data oracle.
9.
Fail yang disimpan dibawah aplikasi iReport adalah (.jrxml) dan ia boleh
dibaca melalui web server apache untuk dipaparkan di web . Sila ikut langkah
seterusnya.
LANGKAH 2: INSTALASI
XAMPP ADD ON TOMCAT.
1.
Selepas proses download selepas,anda perlu membuat langkah setup seperti
biasa
2.
Jika anda sudah mempunyai aplikasi Xampp versi lain yang dipasang
sebelum ini anda perlu meletakkan xampp baru di directori yang berlainan dan
pastikan servis xampp yang terdahulu dimatikan agar tidak konflik.
3.
Selepas memasang XAMP versi ini, ada dua servis utama perlu di ‘run’kan
semasa menjalan sistem aplikasi anda iaitu ‘apache_start’ dan ‘catalina_start’.
Kedua-dua servis ini perlu dihidupkan.
LANGKAH 3:
KONFIGURASI XAMPP TOMCAT DENGAN JASPER REPORT.
Berikut
merupakan konfigurasi web server dengan jasper report. Sila ikuti langkah yang
di bawah :-
1.
Stop tomcat & Apache web server
2.
Salin D:\iReport-4.1.3\ireport\modules\ext ke dalam JAVA_HOME/jre/lib/ext/.
3.
Salin D:\iReport-4.1.3\ireport\modules\ext ke dalam xampp\tomcat\webapps\JavaBridge\WEB-INF\lib
4.
Salin folder java
yang terdapat dalam xampp\tomcat\webapps\JavaBridge ke
D:\xampptomcat\xampp\htdocs\apps_folder
5.
Salin folder \xampp\tomcat\webapps\JavaBridge ke
D:\xampptomcat\xampp\htdocs\apps_folder
6.
Restart tomcat and apache.
LANGKAH 4: MENCUBA
UNTUK MENJANA REPORT JASPER DARI XAMPP
Berikut merupakan langkah-langkahnya :-
1.
Anda perlu menghasilkan satu laporan menggunakan iReport dan simpan
dalam mana direktori (default dalam folder libs)
2.
Setelah kompilkan report tersebut anda salin fail *.jrxml tadi ke dalam
folder apps root di bawah (www/htdocs). Contoh saya letakkan nama folder
jasper.
3.
Seterusnya bangunkan aturcara untuk memanggil fail dan savekan file ini
(php) . Contohnya adalah seperti berikut :
4.1 MENJANA LAPORAN TANPA PARAMETER (save :
oracledbwithoutparam.php)
<?php
/**
* see if
the java extension was loaded.
*/
function checkJavaExtension()
{
if(!extension_loaded('java'))
{
$sapi_type = php_sapi_name();
$port = (isset($_SERVER['SERVER_PORT']) &&
(($_SERVER['SERVER_PORT'])>1024)) ? $_SERVER['SERVER_PORT'] : '8088';
print $port;
if
($sapi_type == "cgi" || $sapi_type == "cgi-fcgi" ||
$sapi_type == "cli")
{
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")))
{
return "java extension not installed.";
}
}
else
{
if(!(@include_once("java/Java.inc")))
{
require_once("http://localhost:8088/JavaBridge/java/Java.inc");
}
}
}
if(!function_exists("java_get_server_name"))
{
return "The loaded java extension is not the PHP/Java
Bridge";
}
return
true;
}
/**
* convert
a php value to a java one...
* @param
string $value
* @param
string $className
* @returns
boolean success
*/
function convertValue($value, $className)
{
// if
we are a string, just use the normal conversion
//
methods from the java extension...
try
{
if
($className == 'java.lang.String')
{
$temp = new Java('java.lang.String', $value);
return $temp;
}
else if ($className == 'java.lang.Boolean' ||
$className == 'java.lang.Integer' ||
$className == 'java.lang.Long' ||
$className == 'java.lang.Short' ||
$className == 'java.lang.Double' ||
$className == 'java.math.BigDecimal')
{
$temp = new Java($className, $value);
return $temp;
}
else if ($className ==
'java.sql.Timestamp' ||
$className == 'java.sql.Time')
{
$temp = new Java($className);
$javaObject = $temp->valueOf($value);
return $javaObject;
}
}
catch
(Exception $err)
{
echo ( 'unable to convert
value, ' . $value .
' could not be converted to ' . $className);
return false;
}
echo
( 'unable to convert value, class name
'.$className.
' not recognised');
return
false;
}
checkJavaExtension();
$compileManager = new
JavaClass("net.sf.jasperreports.engine.JasperCompileManager");
$report =
$compileManager->compileReport(realpath("report22.jrxml"));
$fillManager = new
JavaClass("net.sf.jasperreports.engine.JasperFillManager");
$params = new
Java("java.util.HashMap");
$c = new
JavaClass("oracle.jdbc.driver.OracleDriver");
$d = $c->newInstance();
$dm = new
JavaClass("java.sql.DriverManager");
$conn = $dm->getConnection("jdbc:oracle:thin:@localhost:1521:dbpekan","cmsadmin","root");
$jasperPrint =
$fillManager->fillReport($report, $params, $conn);
$outputPath =
realpath(".")."/"."output.pdf";
$exportManager = new
JavaClass("net.sf.jasperreports.engine.JasperExportManager");
$exportManager->exportReportToPdfFile($jasperPrint,
$outputPath);
header("Content-type:
application/pdf");
readfile($outputPath);
unlink($outputPath);
?>
|
4.2
MENJANA LAPORAN DENGAN PARAMETER (save : oracledbwithparam.php)
<?php
/**
* see if the java extension was
loaded.
*/
function checkJavaExtension()
{
if(!extension_loaded('java'))
{
$sapi_type =
php_sapi_name();
$port =
(isset($_SERVER['SERVER_PORT']) &&
(($_SERVER['SERVER_PORT'])>1024)) ? $_SERVER['SERVER_PORT'] : '8088';
print $port;
if ($sapi_type ==
"cgi" || $sapi_type == "cgi-fcgi" || $sapi_type ==
"cli")
{
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")))
{
return
"java extension not installed.";
}
}
else
{
if(!(@include_once("java/Java.inc")))
{
require_once("http://localhost:8088/JavaBridge/java/Java.inc");
}
}
}
if(!function_exists("java_get_server_name"))
{
return "The loaded
java extension is not the PHP/Java Bridge";
}
return true;
}
/**
* convert a php value to a java
one...
* @param string $value
* @param string $className
* @returns boolean success
*/
function convertValue($value, $className)
{
// if we are a string, just
use the normal conversion
// methods from the java
extension...
try
{
if ($className ==
'java.lang.String')
{
$temp = new
Java('java.lang.String', $value);
return $temp;
}
else if ($className ==
'java.lang.Boolean' ||
$className ==
'java.lang.Integer' ||
$className ==
'java.lang.Long' ||
$className ==
'java.lang.Short' ||
$className ==
'java.lang.Double' ||
$className ==
'java.math.BigDecimal')
{
$temp = new
Java($className, $value);
return $temp;
}
else if ($className ==
'java.sql.Timestamp' ||
$className ==
'java.sql.Time')
{
$temp = new
Java($className);
$javaObject =
$temp->valueOf($value);
return
$javaObject;
}
}
catch (Exception $err)
{
echo ( 'unable to convert value, ' . $value .
' could not be
converted to ' . $className);
return false;
}
echo ( 'unable to convert value, class name
'.$className.
' not
recognised');
return false;
}
checkJavaExtension();
$compileManager = new
JavaClass("net.sf.jasperreports.engine.JasperCompileManager");
$report = $compileManager->compileReport(realpath("report22.jrxml"));
$fillManager = new
JavaClass("net.sf.jasperreports.engine.JasperFillManager");
$params = new Java("java.util.HashMap");
/* @send parameter from php to jasper
*/
$params->put("P_INVOICE_ID",
convertValue($_REQUEST["P_INVOICE_ID"],
"java.lang.Long"));
$params->put("SUBREPORT_DIR",
"D:/work/php/n21eBusinessSuite/product/src/___reports/src");
$c = new JavaClass("oracle.jdbc.driver.OracleDriver");
$d = $c->newInstance();
$dm = new JavaClass("java.sql.DriverManager");
$conn = $dm->getConnection("jdbc:oracle:thin:@localhost:1521:dbpekan","cmsadmin","root");
$jasperPrint = $fillManager->fillReport($report, $params, $conn);
$outputPath =
realpath(".")."/"."output.pdf";
$exportManager = new
JavaClass("net.sf.jasperreports.engine.JasperExportManager");
$exportManager->exportReportToPdfFile($jasperPrint, $outputPath);
header("Content-type: application/pdf");
readfile($outputPath);
unlink($outputPath);
?>
|
Seterusnya, anda boleh mencuba untuk menjana laporan dengan memasukkan
alamat url seperti biasa iaitu :
http://localhost/jasper/ oracledbwithparam.php
http://localhost/jasper/ oracledbwithoutparam.php
Output janaan laporan adalah sepertidi bawah :-
Nota : Proses ini juga lebih kurang untuk menggunakan jasper report server
dalam pembangunan laman web menggunakan java
server pages.