PDA

Bekijk Volledige Versie : Word document genereren vanuit PHP



Robert de Boer
09/11/03, 12:15
Beste mensen,

Ik wil graag een script maken wat een Word-document genereerd vanuit een
php-pagina. De php-pagina(s) bestaan uit een vragenlijst. Afhankelijk van de
gegeven antwoorden moeten (van tevoren gemaakte) blokken tekst onder elkaar
in een Word-document komen te staan. De verwerking van de antwoorden lukt me
zelf nog wel, waar ik nu ben is een situatie dat ik weet welke tekstblokken
ik uiteindelijk moet hebben. Bv: $contentblok1 = tekstdeel1.13,
$contentblok2 = tekstdeel2.4 (door de gegeven antwoorden moet het
word-document beginnen met van tevoren getypt tekstblok 1.13, gevolgt door
tekstblok 2.4). Van het genereren van dit Word-document mag de bezoeker van
mijn website eigenlijk niets merken en het resultaat (het complete
Word-document) moet niet op de server blijven hangen, maar moet per e-mail
verstuurd worden naar mijzelf.

Een vrij complexe vraag denk ik, maar ik zit er al een hele tijd mee. Wie
kan mij een stukje verder op weg helpen met bijvoorbeeld (een link naar) wat
uitleg? Alvast bedankt voor jullie moeite!

Robert

Reinoud Horstink
09/11/03, 12:45
Robert de Boer wrote:
> Beste mensen,
>
> Ik wil graag een script maken wat een Word-document genereerd vanuit een
> php-pagina. De php-pagina(s) bestaan uit een vragenlijst. Afhankelijk van de
> gegeven antwoorden moeten (van tevoren gemaakte) blokken tekst onder elkaar
> in een Word-document komen te staan. De verwerking van de antwoorden lukt me
> zelf nog wel, waar ik nu ben is een situatie dat ik weet welke tekstblokken
> ik uiteindelijk moet hebben. Bv: $contentblok1 = tekstdeel1.13,
> $contentblok2 = tekstdeel2.4 (door de gegeven antwoorden moet het
> word-document beginnen met van tevoren getypt tekstblok 1.13, gevolgt door
> tekstblok 2.4). Van het genereren van dit Word-document mag de bezoeker van
> mijn website eigenlijk niets merken en het resultaat (het complete
> Word-document) moet niet op de server blijven hangen, maar moet per e-mail
> verstuurd worden naar mijzelf.

Enige tijd geleden ben ik tegen hetzelfde probleem aangelopen. De
oplossing was door niet het MS-Word bestandsformaat te gebruiken, maar
het RTF-formaat. Dit wordt probleemloos door MS-Word geopend (en
waarschijnlijk ook door talloze andere tekstverwerkers). Vanuit PHP is
het nog steeds lastig om dergelijke documenten te maken, zeker wanneer
je nog iets met opmaak wilt doen.

Mijn oplossing bestaat uit het in Word maken van een template (inclusief
opmaak, logo's, etc). Hierin verwerk je op de gewenste plaatsen bepaalde
markers (bijvoorbeeld "%FACTUURBEDRAG%"). In je PHP-code gooi je die
template vervolgens in een string. Met replace-acties of regexen kun je
vervolgens die markers vervangen door variabele tekst. Tot slot stuur je
het geheel met het juiste mime-type naar de client.

Kan het netter? Ongetwijfeld. Voor zover ik echter weet niet zonder
externe (betaalde) modules. Bovenstaande oplossing functioneert prima
voor het online invullen van facturen en contracten en zal
waarschijnlijk ook voor jouw probleem een werkende oplossing vormen.

Reinoud.

Ronald Paul
09/11/03, 13:15
"Robert de Boer" <robertdeboer83@hotmail.com> schreef:

>Ik wil graag een script maken wat een Word-document genereerd vanuit een
>php-pagina.

Je kunt naast Reinoud's oplossing ook aan de slag gaan met COM als PHP
draait in een Windows omgeving met daarin tevens Word geïnstalleerd.
Zie http://php.weblogs.com/com_php onder het kopje "Invoking Microsoft
Word with PHP".

>Van het genereren van dit Word-document mag de bezoeker van
>mijn website eigenlijk niets merken en het resultaat (het complete
>Word-document) moet niet op de server blijven hangen, maar moet per e-mail
>verstuurd worden naar mijzelf.

In tegenstelling tot het vorige is dit niet zo moeilijk. Er is
voldoende informatie te vinden over het versturen van e-mails met
bijlagen vanuit PHP.

--
Groet, Ronald

Robert de Boer
09/11/03, 13:45
> Enige tijd geleden ben ik tegen hetzelfde probleem aangelopen. De
> oplossing was door niet het MS-Word bestandsformaat te gebruiken, maar
> het RTF-formaat. Dit wordt probleemloos door MS-Word geopend (en
> waarschijnlijk ook door talloze andere tekstverwerkers). Vanuit PHP is
> het nog steeds lastig om dergelijke documenten te maken, zeker wanneer
> je nog iets met opmaak wilt doen.
>
> Mijn oplossing bestaat uit het in Word maken van een template (inclusief
> opmaak, logo's, etc). Hierin verwerk je op de gewenste plaatsen bepaalde
> markers (bijvoorbeeld "%FACTUURBEDRAG%"). In je PHP-code gooi je die
> template vervolgens in een string. Met replace-acties of regexen kun je
> vervolgens die markers vervangen door variabele tekst. Tot slot stuur je
> het geheel met het juiste mime-type naar de client.
>
> Kan het netter? Ongetwijfeld. Voor zover ik echter weet niet zonder
> externe (betaalde) modules. Bovenstaande oplossing functioneert prima
> voor het online invullen van facturen en contracten en zal
> waarschijnlijk ook voor jouw probleem een werkende oplossing vormen.

Super bedankt voor dit antwoord!!! Klinkt als een zeer goede oplossing voor
mn vraagstuk. Heb je misschien iets van een kort voorbeeld van hoe ik die
template aanroep binnen een string en hoe die replace-acties werken?

Robert

Ronald Paul
09/11/03, 13:45
"Robert de Boer" <robertdeboer83@hotmail.com> schreef:

>Super bedankt voor dit antwoord!!! Klinkt als een zeer goede oplossing voor
>mn vraagstuk. Heb je misschien iets van een kort voorbeeld van hoe ik die
>template aanroep binnen een string en hoe die replace-acties werken?

Zie mijn bericht van gisteren: Message-ID:
<j38pqv0m9vos6ndp44orp39pmdnofhokpn@4ax.com>.

--
Groet, Ronald

Robert de Boer
09/11/03, 14:00
> >Super bedankt voor dit antwoord!!! Klinkt als een zeer goede oplossing
voor
> >mn vraagstuk. Heb je misschien iets van een kort voorbeeld van hoe ik die
> >template aanroep binnen een string en hoe die replace-acties werken?
>
> Zie mijn bericht van gisteren: Message-ID:
> <j38pqv0m9vos6ndp44orp39pmdnofhokpn@4ax.com>.

Daar staat geen antwoord op deze vraag in toch?

Ronald Paul
09/11/03, 14:00
"Robert de Boer" <robertdeboer83@hotmail.com> schreef:

>> Zie mijn bericht van gisteren: Message-ID:
>> <j38pqv0m9vos6ndp44orp39pmdnofhokpn@4ax.com>.
>
>Daar staat geen antwoord op deze vraag in toch?

Jawel toch? Jij wilt een string vullen met de inhoud van een bestand
(een .rtf-template in dit geval) en bepaalde markers vervangen. Hoe en
waarmee dat kan staat in die post aangegeven. Of in ieder geval in die
draad, want het is een erg vergelijkbaar probleem.

--
Groet, Ronald

Robert de Boer
09/11/03, 14:30
> Ik wil graag een script maken wat een Word-document genereerd vanuit een
> php-pagina. De php-pagina(s) bestaan uit een vragenlijst. Afhankelijk van
de
> gegeven antwoorden moeten (van tevoren gemaakte) blokken tekst onder
elkaar
> in een Word-document komen te staan. De verwerking van de antwoorden lukt
me
> zelf nog wel, waar ik nu ben is een situatie dat ik weet welke
tekstblokken
> ik uiteindelijk moet hebben. Bv: $contentblok1 = tekstdeel1.13,
> $contentblok2 = tekstdeel2.4 (door de gegeven antwoorden moet het
> word-document beginnen met van tevoren getypt tekstblok 1.13, gevolgt door
> tekstblok 2.4). Van het genereren van dit Word-document mag de bezoeker
van
> mijn website eigenlijk niets merken en het resultaat (het complete
> Word-document) moet niet op de server blijven hangen, maar moet per e-mail
> verstuurd worden naar mijzelf.

Kwam dit bedrijf net tegen tijdens mn speurtocht over het internet:
http://www.aia-itp.com/index.html
Maakt dit bedrijf eigenlijk niet precies waar ik naar op zoek ben?

Robert

Reinoud Horstink
09/11/03, 17:00
Robert de Boer wrote:

> Super bedankt voor dit antwoord!!! Klinkt als een zeer goede oplossing voor
> mn vraagstuk. Heb je misschien iets van een kort voorbeeld van hoe ik die
> template aanroep binnen een string en hoe die replace-acties werken?

Zoiets kun je eenvoudig zelf schrijven met de functies fopen, fread,
fclose en preg_replace. Een voorbeeld:

$fd = fopen ($userfile, "rb");
$content = fread ($fd, filesize ($userfile));
fclose ($fd);

Let op: $userfile is de bestandslocatie van de rtf-template op je
filesystem. De aanduiding "rb" geldt alleen ingeval van
windows-systemen, op unix-achtigen kan je volstaan met "r". Je template
staat nu in $content, waarmee je vervolgens allerlei geintjes kan
uithalen, bijvoorbeeld:

# vervang marker %FACTUURNR% door de variabele $factuurnr:
$content = preg_replace("%FACTUURNR%", "$factuurnr", $content);

# de boel dumpen naar de tekstverwerker van de client:
$filename = "jouwbestandsnaam.rtf";
header("Content-disposition: attachment; Filename=$filename");
header("Content-type: application/ms-word; name=".$filename);
echo $content;

Reinoud.