…készítsünk dokumentum generálót

Belevalók:

– egy Linux szerver
– egy OppenOffice.org
– egy JODConverter
– csipetnyi PHP

Előkészületek:

A Linux szervert telepítsük fel, ne felejtsük el a frissítéseket sem, mert tudjuk, hogy főzéshez mindig a legfrisebb alapanyagokat kell használni. Adjuk hozzá az OpenOffice.org csomagot, majd keverjük vele a JODConverter-t. Figyeljünk arra, hogy ebből a legfrisebbet szerezzük be. (Erről a címről nagyon olcsón juthatunk hozzá:http://www.artofsolving.com/opensource/jodconverter

Ha minden hozzávalót jól összekevertünk, akkor nincs más hátra, mint ezt a recept szerinti utasítást végrehajtani:
– soffice -headless -accept=”socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard&
Ha ezzel is megvolnánk, akkor már csak a PHP programot kell létrehoznunk, amiből egy exec() hívással végrehajtjuk a következő utasítássort:

function gen($map) {
$ts = rand(0,100000).time();
mkdir("tmp/".$ts);
exec("unzip szamla.odt -d tmp/".$ts); //Kitömörítjük az ODT fájlt
$styles = file_get_contents("tmp/".$ts."/styles.xml"); //Fejléc és lábléc
foreach($map as $key=>$value) {
$styles = str_replace($key,$value,$styles);
}
file_put_contents("tmp/".$ts."/styles.xml",$styles);
$content = file_get_contents("tmp/".$ts."/content.xml"); //Tartalom
foreach($map as $key=>$value) {
$content = str_replace($key,$value,$content);
}
file_put_contents("tmp/".$ts."/content.xml",$content);
exec("cd tmp/".$ts.";zip -r ../".$ts.".odt *"); //Visszatömörítjük egy temp ODT fájlba
exec("java -jar jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar tmp/".$ts.".odt tmp/".$ts.".pdf"); //Átadjuk az OOffice-nak konvertálásra
exec("rm -rf tmp/".$ts); //Töröljük az átmeneti könyvtárat
$pdf = file_get_contents("tmp/".$ts.".pdf"); //Visszaolvassuk a PDF-et
echo $pdf; //Kiküldjük outputra
unlink("tmp/".$ts.".pdf"); //Töröljük az átmeneti PDF-et
}

Ha az ODT dokumentumban elhelyezünk ###akarmi### jelölőelemet, akkor a $map=array(“###akarmi###”=>”Akármi”); tömbbel meghívva a fenti függvényt kapunk végeredményként egy kitöltött PDF-et, amit azonnal tálalhatunk… 😉

Vélemény, hozzászólás?