PDA

Bekijk Volledige Versie : Text replace in MS Word document met PHP



Fluid Void
01/05/04, 01:45
Hallo allemaal,

In een PHP script op een linux platform probeer ik in een MS Word document
enkele tags te vervangen door tekst. Vervolgens verstuur ik het document per
email.

Zonder het vervangen van de tags verloopt het proces foutloos, ik krijg dan
een attachment wat wordt geopend met MS Word.

Echter zodra ik een preg_replace of een str_replace erop loslaat kan ik het
document niet meer openen. MS Word vraagt dan om een speciaal filter voor
het document.

Mijn vraag is: hoe kan dit? Maakt het uit dat het bestand nu groter is
geworden en moet er ergens een getal geupdated worden?


Mijn code:

$userfile = "besteld.doc";
$fd = fopen ($userfile, "rb");
$attachment = fread ($fd, filesize ($userfile));
fclose ($fd);

$attachment = preg_replace("/__naam__/", "test", $attachment);

.... versturen mail ...


Bij voorbaat dank voor een antwoord,

FV

Warden Dave
01/05/04, 02:15
"Fluid Void" <fluid@void> wrote:

> Hallo allemaal,

& Hoi,

> In een PHP script op een linux platform probeer ik in een MS Word document
> enkele tags te vervangen door tekst. Vervolgens verstuur ik het document per
> email.
>
> Zonder het vervangen van de tags verloopt het proces foutloos, ik krijg dan
> een attachment wat wordt geopend met MS Word.
>
> Echter zodra ik een preg_replace of een str_replace erop loslaat kan ik het
> document niet meer openen. MS Word vraagt dan om een speciaal filter voor
> het document.
>
> Mijn vraag is: hoe kan dit? Maakt het uit dat het bestand nu groter is
> geworden en moet er ergens een getal geupdated worden?
<knip>

Dat zal veelal wel moeten, ja. Je kunt niet zomaar in het wilde weg de inhoud
van (binaire) bestanden wijzigen zonder alleen al interne pointers & posities
invalide te maken; al kom je met het aanpassen van bijv. tekt zonder de lengte
te wijzigen meestal wel weg.

Omdat MS Word, welke versie (?) ook, naar mijn weten beslist geen server-
side voorziening is lijkt het mij dat je in 1 van de MS groepen aan het goede
adres bent. Zie +- ook:
http://msdn.microsoft.com/office/understanding/word/default.aspx en
http://www.wotsit.org/ .

WD

Reinoud Horstink
01/05/04, 11:25
Fluid Void wrote:
> Hallo allemaal,
>
> In een PHP script op een linux platform probeer ik in een MS Word document
> enkele tags te vervangen door tekst. Vervolgens verstuur ik het document per
> email.
>
> Zonder het vervangen van de tags verloopt het proces foutloos, ik krijg dan
> een attachment wat wordt geopend met MS Word.
>
> Echter zodra ik een preg_replace of een str_replace erop loslaat kan ik het
> document niet meer openen. MS Word vraagt dan om een speciaal filter voor
> het document.

Ik heb een tijdje geleden hetzelfde probleem ondervonden. Het heeft geen
zin om in het binaire Word-formaat te zitten hakken. In mijn geval was
de oplossing om in plaats van .doc het =RTF-bestand te gebruiken. Dit
kun je eenvoudig in Word openen (de doorsnee gebruiker ziet geen
verschillen) en opslaan. Server-side vervangen van strings levert in een
RTF geen problemen.

Reinoud.

Branko Collin
01/05/04, 14:35
"Fluid Void" <fluid@void>, you wrote on Sat, 1 May 2004 01:40:34
+0200:

>In een PHP script op een linux platform probeer ik in een MS Word document
>enkele tags te vervangen door tekst. Vervolgens verstuur ik het document per
>email.
>
>Zonder het vervangen van de tags verloopt het proces foutloos, ik krijg dan
>een attachment wat wordt geopend met MS Word.

Word gebruikt waarschijnlijk een zogeheten binair bestandsformaat. Dat
wil over het algemeen zeggen dat het formaat is geoptimaliseerd voor
snel schrijven en lezen, en dat dat ten koste gaat van robuustheid.

Met andere woorden, door het bestand te wijzigen, maak je het stuk.

Vaak lukt het met binaire formaten nog wel om een gegevensstring te
vervangen door een gegevensstring van dezelfde lengte. Je zult echter
moeten experimenteren om te zien of dat ook voor het MS Word-formaat
geldt.

Microsoft geeft voor zover ik heb begrepen niet de specificatie van
zijn Word-formaat vrij. Jou staan dan enkele dingen te doen:

- Zoek naar een specificatie in andere bronnen. OpenOffice zou
bijvoorbeeld ergens het Word-formaat gedocumenteerd kunnen hebben
staan.

- Zoek uit of er conversieprogramma's voor MS Word-documenten bestaan,
die je bestanden converteren van en naar een formaat wat je wel
makkelijk kunt beschrijven.

- Gebruik in plaats van MS Word-bestanden een formaat dat wel
(enigszins) duidelijk is gespecificeerd, en dat je gebruikers ook
ondersteunen. RTF is dan het meest voor de hand liggend, omdat dat
door Microsoft is ontwikkeld en door MS Word wordt ondersteund.

--
branko collin
- dr: "have you been exposed to any user interfaces designed by engineers?"
- woman: "yes"
- dr: "you have interface poisoning. you'll be dead within a week" (scott adams, dilbert)

Fluid Void
02/05/04, 20:35
> Ik heb een tijdje geleden hetzelfde probleem ondervonden. Het heeft geen
> zin om in het binaire Word-formaat te zitten hakken. In mijn geval was
> de oplossing om in plaats van .doc het =RTF-bestand te gebruiken. Dit
> kun je eenvoudig in Word openen (de doorsnee gebruiker ziet geen
> verschillen) en opslaan. Server-side vervangen van strings levert in een
> RTF geen problemen.

In rtf formaat werkt het inderdaad wel, dank voor de reacties!

FV