Report dengan format docx
sebelum nya sudah dibahas untuk report format doc
pada url: http://prabhaswara.wordpress.com/2010/09/02/membuat-laporan-doc-dengan-php/
tapi untuk report diatas mempunyai kelemahan yaitu dalam membentuk url gambar yang hanya di link kan ke source gambar (tidak disimpan dalam file doc)
berawal dari ide awie nyantai yg bilang format docx bisa di extrak dan beruba file2 xml maka muncul lah ide mengotak ngatik file docx tersebut untuk keperluan report
dengan keunggukan template bisa di sediakan dulu, gambar juga masuk kedalam file tersebut..
program ini dibuat dalam bhs pemograman php dan menggunakan
lib ZipArchive yang anda harus aktifkan terlebih dahulu
idenya sebenernya simple
1. buat template report dengan format docx (ms word)
2. baca file xml di dalem docx
3. ganti variable2 yang sudah di setel dengan data anda
//source classdocx
<?php
/**
* 5jul2011
* by: prabhaswara
* required : - lib php ZipArchive
*
*
* merubah variable yang ada di docx
* untuk report dengan template yang sudah di buat sebelum nya di docx
*
* langkah:
* 1. init
* 2. setting variable ->replace("{varilable}","");
* 3. timpah xml ->generate()
*/
class ClassDocx
{
public $ftemplate; // file yang di jadikan template laporan
public $freport; // generate file yang akan mejadi laporan
private $documentxml; // dokumen xml dalam docx
private $headerxml; // header docx
private $zip; //variable zip
/**
* ftemplate: file template
* freport : file report
*/
function __construct($ftemplate,$freport="")
{
$this->ftemplate=$ftemplate;
//$this->freport=($freport="")?$ftemplate:$freport;
if($freport=="")
{
$this->freport=$ftemplate;
}
else
{
copy($ftemplate,$freport);
$this->freport=$freport;
}
//liat zip nya
$this->zip = new ZipArchive;
$this->zip->open($this->freport, ZipArchive::CREATE);
//baca documentxml
$fp=$this->zip->getStream("word/document.xml");
if(!$fp) exit("failed\n document.xml ");
while (!feof($fp)) {
$this->documentxml .= fread($fp, 2);
}
fclose($fp);
//baca header
$fp=$this->zip->getStream("word/header1.xml");
if(!$fp) exit("failed header1.xml \n");
while (!feof($fp)) {
$this->headerxml .= fread($fp, 2);
}
fclose($fp);
}
/**
* untuk merubah variable pada xml
*/
function replace($var,$words)
{
$this->documentxml=str_replace($var,$words,$this->documentxml);
$this->headerxml=str_replace($var,$words,$this->headerxml);
}
function generate()
{
$this->zip->addFromString('word/document.xml', $this->documentxml);
$this->zip->addFromString('word/header1.xml', $this->headerxml);
}
}
?>
//contoh makek nya
<?php
include "classdocx.php";
$docx=new ClassDocx("template_printout.docx","wwkwkwk.docx");
$docx->replace("{nmtransaksi}","Pengeluaran");
$docx->replace("{noref}","No.5/07/2011");
$docx->replace("{hari}","Raboo");
$docx->generate();
?>
sebenernya masih banya kekurangan pada class diatas
salah satunya blon bisa parsing html menjadi format xml docx
dan juga format variable musti bener (soalnya klo di edit2 variable nya suka berubah @_@
semoga saja ada programer yang dengan senang hati membuat kan class yang jauh lebih baik dan lengkap dan di sajikan secara gratis.. Aminnn….
pembaca yg baik selalu tinggalkan komentar



