create word-document via template

Status
Niet open voor verdere reacties.

klaaslievens

Gebruiker
Lid geworden
13 okt 2006
Berichten
57
Hoi iedereen!

Ik heb een word-template, waarvan de gegevens zouden moeten ingevuld worden via een database.

Ik heb ergens gelezen dat ik dit als volgt zou kunnen doen:

PHP:
<?php
$content = file_get_contents('template.rtf');
$content = str_replace('**TITEL**',$mijn_titel,$content);
//etcetera
?>

Iemand enig idee wat er op de plaats van die "etcetera" moet komen? Ik slaag er maar niet in om deze gegevens weg te schrijven naar een nieuw word-document. Liefst zou ik hebben dat dit document meteen gesaved wordt, maar als ik het document via een header moet openen, om daarna pas te kunnen saven, dan kan ik daar ook mee leven...

Iemand ervaring hiermee? Merci!
 
PDF ken ik min of meer, maar het bestand moet absoluut in een worddoc opgeslagen worden, zodat het achteraf nog gemakkelijk in word zelf te wijzigen is.

Ik heb intussen een andere mogelijkheid uitgeprobeerd, die ook vrij goed blijkt te werken.

PHP:
$bestand = $productie.".doc";
$fp = fopen($bestand, 'w') or die("can't open file");
fwrite($fp, $content);
fclose($fp);

Waarbij $content een volledige tabel is met gegevens uit een database. Enige nadeel is dat ik die tabel niet via CSS kan opmaken, want het word-document behoudt die opmaak niet. Vind ik spijtig, vandaar dat ik het had gehoopt via de file_get_contents en str_replace dit te kunnen oplossen...

Hoewel ik verder kan, laat ik dit topic nog even open. Misschien is iemand anders op de hoogte van mijn oorspronkelijke bedoeling.

Merci!
 
Bedankt, maar dat artikel was ik ook al tegengekomen. Is voor mij geen oplossing, aangezien het script van een com-extensie gebruik maakt. Deze werken enkel op een windows-server, en dat is dus bij mij niet het geval...

Het vreemde met file_get_contents is dat ik allemaal blokjes en onverklaarbare lettercombinaties krijg in mijn word-document. Als ik de inhoud van die functie echo, dan krijg ik diezelfde tekenreeksen... Misschien doet dit bij sommigen een belletje rinkelen?
 
Omdat ik de vraag krijg hoe ik dit nu heb aangepakt, post ik nu hier even een script met uitleg. Hopelijk kunnen anderen hier ook gebruik van maken...

PHP:
<?php
//de eerste stap die je moet doen, is de inhoud van het document bepalen via een variabele, bij mij is dit $content
$content = "<table><tr><th>Naam</th><th>adres</th></tr>";
//Telkens je gegevens nodig hebt uit een database, haal je die via een mysql_query.
$query=mysql_query("select * from tabel where...");
while (list(......)=mysql_fetch_row($query){
//hier ga je verder met je $content. Vergeet dus niet het puntje voor het =-teken
	$content.="<tr><td>".$naam."</td><td>".$adres."</td></tr>";
//via bovenstaande regel maakt hij dus voor elk geselecteerde record een rij aan in de tabel, en voegt deze toe aan $content
//einde van de gegevens uit de database, dus accolade en afsluiten van tabel
	}
	$content.="</table>";
//een afbeelding inladen kan ook, maar pas op: je hebt een absolute verwijzing nodig
$content.="<img src='http://localhost/project/docs/1ogo.jpg' alt='afbeelding'>";

//vanaf hier gaan we het bestand effectief wegschrijven
$bestand = $naam_van_het_bestand.".doc";
//open of creëer het bestand
$fh = fopen($bestand, 'w') or die("can't open file");
//schrijf $content in het bestand
fwrite($fh, $content);
//sluit het document
fclose($fh);
/*that 's it! Het leuke is ook, bij mijn project toch, dat dit script automatisch wordt uitgevoerd wanneer ik gegevens wijzig of toevoeg 
aan de database. Elk bestand dat deze database gebruikt, laat ik ook dit script includen. Hij creëert niet telkens een nieuw bestand, maar
overschrijft het oude. Je kan ook makkelijk zelf de doelmap bepalen, bij mij zit deze ook opgeslagen in de database.
Bepaal dan $bestand bijvoorbeeld als volgt:
$bestand = "D:project/".$naam_van_het_bestand.".doc";
*/
?>
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan