Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1
SEPUTAR MEMBUAT LAPORAN DENGAN PHP
This discussion has been closed.
Comments
di server yg elo kelola sendiri ?
atau pake server shared hosting yg manajemen nya ditangan orang lain ?
sebenernya intinya sama, pake aplikasi pihak ketiga
cuma bentuknya yg beda
beban dan load prosesnya juga beda
maklum pemula,
Thanks atas masukanya,,,,
trus, yg kelola gua jg,
Nama aplikasi nya apa ya, boo,,,?
http://www.libreoffice.org/
http://en.wikipedia.org/wiki/LibreOffice
jalan di *nix dan win
lisensi LGPL v3
itu aplikasi suite semacam microsoft office
jadi mesti di install
cuma punya fasilitas konversi dokumen lewat perintah command line
ini yg dimanfaatkan utk konversi pake php
template xml -> php -> fungsi exec() / passthru() / system() -> perintah CLI -> libreoffice -> office document
format output yg pernah gw bikin : pdf, xlsx, xls, docx, doc, pptx, ppt
Thanks2 Boo
ini contoh potongan script konversi pake libreoffice 4.0,
web server pake apache,
os windows
$config_libreoffice_path='C:\\Program Files\\LibreOffice 4.0\\program\\soffice.exe';
$config_temp_dir='C:\\temp';
header('Expires: Tue, 1 Jan 1980 00:00:00 GMT');
header('Cache-Control: no-cache');
header('Pragma: no-cache');
pdf :
header('Content-Disposition: attachment; filename="'.$fname.'.pdf"');
header('Content-Type: application/pdf');
exec('"'.$config_libreoffice_path.'" -headless -convert-to pdf -outdir "'.$config_temp_dir.'" "'.$config_temp_dir.'\\'.$fname.'.xml"');
readfile($config_temp_dir.'\\'.$fname.'.pdf');
xls :
header('Content-Disposition: attachment; filename="'.$fname.'.xls"');
header('Content-Type: application/vnd.ms-excel');
exec('"'.$config_libreoffice_path.'" -headless -convert-to xls:"MS Excel 97" -outdir "'.$config_temp_dir.'" "'.$config_temp_dir.'\\'.$fname.'.xml"');
readfile($config_temp_dir.'\\'.$fname.'.xls');
doc :
header('Content-Disposition: attachment; filename="'.$fname.'.doc"');
header('Content-Type: application/vnd.ms-word');
exec('"'.$config_libreoffice_path.'" -headless -convert-to doc:"MS Word 97" -outdir "'.$config_temp_dir.'" "'.$config_temp_dir.'\\'.$fname.'.xml"');
readfile($config_temp_dir.'\\'.$fname.'.doc');
cara manual bikin template xml nya :
- bikin dulu dokumen yg dimau pake microsoft office
misal bikin surat undangan, pake microsoft word
Kepada : {KEPADA}
di {TEMPAT}
Isi surat
Mengetahui,
{PEJABAT}
- format sesuai kebutuhan
- simpan jadi file doc (kalo butuhnya doc / pdf)
- tutup microsoft word
- buka file doc pake libreoffice writer, save as jadi file .fodt
- tutup libreoffice writer
- rename file .fodt jadi .xml (karena isinya emang xml, kagak di rename pun juga kagak masalah)
- buka pake notepad atau text editor lain buat memeriksa doang,
elo bakal ketemu text sejenis / kira-kira :
<text:p text:style-name="P4">Kepada : {KEPADA}</text:p>
<text:p text:style-name="P2">di {TEMPAT}</text:p>
<text:p text:style-name="P1"/>
<text:p text:style-name="P1">Isi surat</text:p>
<text:p text:style-name="P1"/>
<text:p text:style-name="P3">Mengetahui,</text:p>
<text:p text:style-name="P3">{PEJABAT}</text:p>
- letakan file xml di folder yg bisa diakses php, misal di : C:\template\
selesai dah bikin template nya
cara proses template sebelum di konversi jadi format dokumen yg dimau :
$field=array('{KEPADA}', '{TEMPAT}', '{PEJABAT}');
$replace=array('Budi', 'Jakarta', 'Amir');
$fname='surat';
$template=file_get_contents('C:/template/nama_template.xml');
file_put_contents($config_temp_dir.'\\'.$fname.'.xml', str_replace($field, $replace, $template));
file "surat.xml" siap di konversi jadi file doc / pdf pake CLI nya libreoffice spt script awal
silakan elo gali lebih dalam, kemungkinan yg bisa elo kembangkan (dan emang bisa)
- template excel : ms excel .xls -> libreoffice calc .fods
- pembuatan template .doc / .xls diserahkan ke operator + ada form upload template
konversi .doc / .xls -> .fodt / .fods via script php + CLI libreoffice
prosesing replace php dinamis tergantung field yg ada
- doc / pdf multi halaman, format berulang maupun tidak berulang
- xls multi row, multi sheet
dll
untung :
- super fleksible, pengembangan silakan gali sendiri
- bisa memisahkan tugas pembuatan template dan koding script
- hasil bagus, kalo pun layout ada melesetnya sangat minim
- ringan di php nya, lama proses tergantung ukuran dokumen
rugi :
- cuma bisa dipake di server sendiri
- mesti install aplikasi suite 300MB
umumnya pemikiran programmer kalo bikin laporan pdf / doc / xls
pake tambahan librari script php
- pdf : fpdf dan sejenisnya
- word : phpdocx (bayar)
- excel : phpexcel
untung :
- bisa dipake di shared hosting dan server sendiri
- bisa utk generate dokumen dengan format profesional
rugi :
- fpdf, ribet ngatur layout, biarpun pake librari tambahan lagi html2pdf
- phpdocx, phpexcel : hasil output banyak melesetnya dari format yg dimau
- beban konversi berat di php nya, menguras resource, terutama cpu dan memori ... namanya juga interpreter
- sulit bikin template yg bisa diserahkan pekerjaannya ke operator
kalo dokumen besar, libreoffice prosesnya juga lama
tapi masih lebih baik dibanding librari php berupa script,
soalnya libreoffice itu aplikasi desktop, bukan script utk interpreter
kalo sudah sama-sama harus menghasilkan dokumen besar
baik librari script php atau libreoffice harus mengubah seting time limit eksekusi php jadi 0 (tanpa batas waktu)
tapi keluaran lebih cepat dihasilkan dari libreoffice
librari script php bisa hang kalo dokumen terlalu besar
librari script php cuma mungkin dipake kalo pake shared hosting
itu pun kemungkinan akun bakal di ban oleh admin server karena menguras resource jika harus menghandle dokumen besar
kalo server sendiri referensi gw tetep lebih baik pake libreoffice
kecuali ada alternatif aplikasi desktop lain yg lebih baik
alternatif lain yg sering dipake :
- header xls / doc
- isinya html
untung :
- sederhana, kagak butuh librari / aplikasi tambahan lain
- bisa dipake di shared hosting dan server sendiri
- hanya html, seperti generate halaman web biasa
- ringan, tapi bisa jadi berat kalo datanya banyak
rugi :
- sulit membuat halaman dokumen laporan yg profesional
- editing nya tetep konten html, bukan format aslinya word / excel
- multi page di word dan multi sheet di excel lebih ruwet buatnya
- sama ruwet nya kalo mau buat perulangan header tiap halaman yg multi page di word
- html tidak bisa utk menghasilkan formula di excel
- pembuatan template sulit diserahkan ke operator, karena paling tidak operator harus tahu cara menulis tag-tag html
bukan server shared hosting / vps
kalo dedicated masih dimungkinkan utk install
kondisi nya spt itu atau kagak ?
dan load nya juga tinggi, kemungkinan bakal di suspend ama admin server
satu-satu nya cara yg kesisa content html tapi pake header doc
$sr = "sr";
$filename = sprintf("report_dokumen.doc",$sr);
$srnumber = sprintf ("2-%10s", $sr);
header("Content-Type: application/vnd.ms-word");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=$filename");
echo "<table border=1>
<tr>
<td><b>field1</b></td>
<td><b>field2</b></td>
</tr>
</table>";
?>
kagak bisa di apa-apain ...
Format output nya juga cukup lengkap. Ada tools designer nya juga <iReport>.
Menggunakan Jasper Report di php sebenarnya memanfaatkan php-javabridge. Dan di internet sudah ada beberapa tutorial yang membahas ini, bahkan ada blogger yang copy paste tutorial orang ditaro di blog nya sendiri
Yang ingin saya sampaikan, jangan ikuti tutorial2 itu!!! karena tutorial mereka sudah obsolete, jadi baca tutorial php-java bridge hanya di diskusiweb kesayangan Anda (wkwkwkwk mekso
Langkah-langkah menggunakan Jasper Report di PHP
- Download file Java.inc dan JavaProxy.php di url http://php-java-bridge.sourceforge.net/doc/download.php
- Pastikan Anda menginstall java (instal JDK jangan cuma JRE).
- Buat file report.php (nama filenya terserah), simpan di folder www/htdocs/apapun itu di web server Anda yang isinya seperti berikut.
// report.phpJalankan dari browser. Akan keluar seperti ini kira-kira:
Sekarang tinggal buat file java untuk testing, kita akan coba buat sebuah method di java yang akan dipanggil dari php:
// JasperReportsWrapper.java
Compile dan jadikan menjadi sebuah file jar dan jalankan.
Balik lagi ke file report.php dan ubah menjadi seperti ini:
// report.php
Di browser akan keluar output:
Hello World
Selamat Anda sudah berhasil menjalankan method java dari php, tutorial selesai
// JasperReportsWrapper.java
Ok, jangan panik dulu, itu cuma beberapa method yang dibuat untuk kebutuhan export report nya.
- method getConnection => cuma untuk return object class Connection aja.
- method connect2DB => koneksi ke database.
- method saveReportToExcel
@param String query, String fileName, String fileXml
Untuk export report ke excel.
- method saveReportToPDF
@param String query, String fileName, String fileXml
Untuk export report ke pdf.
- method saveReportToPDF
@param String fileName, String fileXml, HashMap parameter
Untuk export report ke pdf dengan parameter berbeda.
ini dinamakan overloading method (di php gak ada cuy).
Saya gak akan perpanjang tutorial ini dengan tutorial cara buat file jrxml menggunakan Jasper Report atau iReport (tools designer untuk pembuatan report menggunakan Jasper Report / iReport loh bukan iPad
Anda bisa mempelajari Jasper Report dan iReport di tutorial2 di internet (banyak banget tinggal googling).
Yang perlu diperhatikan di project JasperReportsWrapper, memerlukan file jar sebagai berikut:
- commons-beanutils-1.8.2.jar
- commons-collections-3.2.1.jar
- commons-digester-1.7.jar
- commons-logging-1.1.jar
- groovy-all-1.7.5.jar
- iText-2.1.7.jar
- jasperreports-4.0.2.jar (saya pake jasper report versi ini)
- JavaBridge.jar
- mysql-connector-java-5.1.13-bin.jar
- poi-3.6.jar
Semua file jar dapat di download di bundle jasper report, kecuali file JavaBridge.jar yang di download dari situs php java bridge dan file mysql-connector-java-5.1.13-bin.jar yang bisa di download di situsnya mysql, atau bagi yang menggunakan netbeans sebagai IDE, file mysql-connector sudah ada di lib nya netbeans.
Saya akan anggap file jrxml sudah tersedia,
note: file jrxml nya mesti di letakan sejajar dengan file JasperReportsWrapper.jar (lihat method getAbsolutePath di class JasperReportsWrapper).
Sekarang balik lagi ke file report.php yang dibuat di awal, maka ubah file report.php menjadi seperti ini:
// report.php
DI class JasperReportsWrapper sudah ada output ke excel dan pdf,
untuk output ke format text, HTML, OpenOffice dan Word buat sendiri ya,
sama aja isinya, cuma tinggal ganti2 nama method nya aja
gampar aja napa yang nyolong ...
btw,
install JDK nya di server yo ?
lha sama dong, semodel libreoffice yg mesti install libre nya di server ...
kalo shared apa bisa dilakukan ?
* sori telat paham * pertanyaan sudah kejawab di posting sebelumnya
catatan :
kalo pake jasper mixing dengan koding java
artinya, minimal harus paham java dan penggunaan tools nya
silakan kalo ada yg mau nambah tutor cara lain yg bisa dipakai
Yupe, install jdk di server, btw dulu juga gw pernah bilang kalo ini butuh allow url fopen jadi on, tapi ternyata gak perlu, ya itu.. dulu ikutin tutorial2 di internet, banyak yg eksperiment tapi masih mentah, jadi bikin tersesat
Pas coba-coba sendiri, ternyata php 5 dah built in untuk handle java, jadi gak perlu lagi ekstensi php_java.dll, ekstensi ini cuma dipake untuk php 4.
Belajar nya bisa aja ala Bruce Lee, otodidak dan seperlunya, jadi cuma butuh belajar java cara bikin report pake jasper. Selebihnya meraba-raba gpp, gak ada yg ngelarang, yg penting report nya jadi wkwkwkwk.
note:
Untuk method saveReportToPDF yg kedua itu gw buat yang pake parameter, jadi kadang kan kita bikin report dengan parameter inputan yang di post.
- install dulu libreoffice di server
- lalu bikin template dokumen nya,
biasanya lebih familiar kalo pake ms office,
jadi bikin aja template nya pake ms office
pdf / doc -> ms word -> simpan jadi file .doc
xls -> ms excel -> simpan jadi file .xls
ppt -> ms powerpoint -> simpan jadi file .ppt
- buka file template pake aplikasi libreoffice yg sesuai
doc -> libreoffice writer -> simpan jadi file .fodt
xls -> libreoffice calc -> simpan jadi file .fods
ppt -> libreoffice impress -> simpan jadi file .fodp
file .fodt , .fods , .fodp itu semua sebenernya file xml
file template sudah siap dipake di php
- koding php buat buka file template xml
- koding php buat replace variabel yg di mau ( dicontoh gw bikin "variabel" pake {NAMA_VAR} ) dengan string yg bener
- koding php buat simpan hasil replace jadi file temporari
- koding php buat eksekusi libreoffice lewat cli pake exec()
buat konversi file temporari jadi tipe file yg dimau
jadi dah dokumen nya
kapan hari si ableh bikin model (pake libreoffice juga)
- web server di mesin A (linux)
- libreoffice di install di mesin B (windows)
- libreoffice punya listener service utk listen port tertentu
soffice "-accept=socket,host=127.0.0.1,port=8080,tcpNoDelay=1;urp;" -headless -nodefault -nofirststartwizard -nolockcheck -nologo -norestore
- convert via jaringan
semestinya bisa saja kalo mesin A online di internet, bisa di akses lewat domain name / ip publik
dan mesin B juga online di internet, juga bisa di akses lewat domain name / ip publik
konversi bisa dilakukan via jaringan
cuma prosesnya ...
konversi via jaringan LAN pasti lebih lama dibanding kalo 1 mesin,
konversi via jaringan internet pasti lebih lama dibanding lewat LAN
kecuali web server nya jalan di shared hosting.
Jadi cuma modal 1 server abal2 jalan di win trus dikasih ip public.
btw bikin thread replikasi di mysql yuk, lagi oprek nih.
http://www.diskusiweb.com/categories/tanya-jawab
masalahnya apa ...
jadi klo pake libre office itu lebih ringan ya gan ? klo server nya pake laptop gmn ? localhost doang
ada yg pernah coba ? yg pernah coba paling byk udah brp baris data nya ?
lg mau bikin laporan pake excel tapi baru coba pake header di phpnya, hasilnya masih ada yg salah...
mestinya isinya angka misal "400580860869" tp di excel hasil exportnya "4.00581E+11" selain itu yg isinya teks doang bener semua
400580860869 kan sama dengan 4.00581E+11 itu karena terlalu panjang angkanya dan pembulatan, hanya saja formatnya harus kita ubah bu. Biasanya untuk entrian angka yang nilainya terlalu panjang ubah saja ke format teks, biar lgsung nongol.
ini gw cuma ngasih contoh
bikin template pake microsoft word
simpan jadi template.docx
buka pake libreoffice, periksa bentuknya, edit dan sesuaikan jika perlu
simpan jadi template.fodt
file fodt itu xml, isinya bisa di lihat di attachment
ada perulangan di sini : ambil yg berulang, ganti dgn "variable" :
bagian yg berulang, ambil hanya yg diperlukan, ganti dgn "variable"
tinggal bikin koding php
file temp.fodt sudah bisa di convert jadi PDF yg berisi banyak data berulang.
bisa juga di convert balik jadi DOC / DOCX dgn data yg berasal dari database yg di generate lewat script
kalo jadi PDF, hasilnya sudah ndak bisa di edit
kalo jadi DOC / DOCX, hasilnya masih bisa di edit
dan hasilnya bener-bener file DOC / DOCX nya microsoft word,
bukan file HTML yg dikasih header & extension DOC / DOCX
terima kasih atas reply nya mas....
lalu template nya bisa di attach juga
atau lebih baik elo bikin tret baru
di sini http://diskusiweb.com/categories/tanya-jawab
kasih judul yg baik
post deskripsi masalah elo yg jelas
lampirkan koding dan yg lainnya (db, template, dll)
lalu lanjut bahasnya di tret elo sendiri
gw juga lagi nyiapin tutorial bikin report pake libreoffice model beginian
... lebih kompleks ...
perulangan 1 halaman penuh
ada header footer
ada logo di header
banyak image
ada page numbering
tapi baru selesai nyiapin template nya
belum bikin contoh db ama contoh koding nyacontoh db sudah jadi, contoh koding sudah jadi
lagi bikin step-by-step dari awal banget (jadi bikin tutorial lengkap)
abaikan tulisan read error nya, itu sudah gw ganti pake {VARIABLE}
contoh database sdh jadi ...
contoh koding sdh jadi ...
dokumen bisa jadi pdf atau doc ...
http://diskusiweb.com/discussion/50479/tutorial-membuat-dokumen-laporan-pdf-doc-docx-xls-xlsx-ppt-pptx-dengan-php-dan-libreoffice
tanya-jawab silakan membuat thread baru di :
http://diskusiweb.com/categories/tanya-jawab