# Word Dokument via PHP erstellen



## hans_schmid (22. September 2004)

Hallo,

ich habe mal wieder ein ziemliches Problem.
Ich muss bzw. würde gerne über PHP ein Word Dokument erstellen.

Dazu habe ich mich jetzt mal im net schlau gemacht und zumindest mal die Möglichkeit der COM-Objekte gefunden.
Das funktioniert prinzipiell auch allerdings gibt es zwei Nachteile.
1. Muss MS Word dazu auf dem Server installiert sein (was wohl im Betrieb dann nicht der Fall sein wird)
und 2. werden, wenn ich eine Tabelle in das Dokument einfügen möchte, alle Tabellenränder mit übernommen, was ziemlich unschön aussieht.

Hier mal mein Code:
*write_to_doc.php*

```
<?php
$word=new COM("word.application") or die("nix geht");
$word->visible = 1;
$word->documents->Open("C:\\test.htm");
$word->documents[1]->saveas("C:\\test_one.doc",1);
$word->Quit();
$word->release();
$word = NULL;
?>
```
*test.htm*

```
<table border="0" bordercolor="white" bordercolordark="white" bordercolorlight="white" >
<tr>
	<td>
		<table width="240">
		<tr>
			<td><img src="logo.jpg" width="80" height="58" alt="" border="0"></td>
			<td valign="top" align="right"><img src="siemens.jpg" width="100" height="17" alt="" border="0"></td>
		</tr>
		</table>
	</td>
</tr>
<tr>
	<td height="50" bgcolor="#B7DDFF">
		<table width="240">
		<tr>
			<td align="right"><font size="+1">ertser Teilnehmer</font></td>
		</tr>
		</table>
	</td>
</tr>
</table>
```

Mit diesem Code bekomm ich dann folgendes Dokument:







Hat dazu jemand eine andere Idee/Lösungsansatz?

Wäre über jede erdenkliche Hilfe dankbar!

MfG
Hans


----------



## thekorn (22. September 2004)

Also zunächst, habe weder Ahnung von PHP noch von COM-Objekten.
Aber ich denke mit einem Trick lässt sich dein Problem ohne weiteres lösen.
Word gibt, wenn es nicht als editor eingerichtet ist,  jedes mit HTML formatierte Dokument aus.
Soll heißen, wenn du deine test.html einfach in test.doc umbenennst, sie dann in word öffnest, wird es wie von dir gefordert angezeigt.
Das mit den unschönen Rändern ist Einstellungssache in Word selber.

gruß
thekorn


----------



## hans_schmid (22. September 2004)

Das hört sich ja schonmal nicht schlecht an.

Und wo welche Einstellung muss ich ändern, damit die Ränder nicht angezeigt werden?

MfG
hans


----------



## thekorn (22. September 2004)

Tabelle-> Gitternetzlinien ausblenden oder so

gruß
thekorn


----------



## hans_schmid (23. September 2004)

Danke danke, das funktioniert wirklich ganz gut.

Allerdings habe ich jetz noch ein anderes Problem:

Wie bekomme ich den HTML-Quelltext, den PHP erzeugt, in eine Datei (html oder txt...) geschrieben?

Also sowas wie im Browser "Quelltext anzeigen"...

Kann mir da jemand einen Tip geben?

MfG
Hans


----------



## Ben Ben (23. September 2004)

Entweder im Script direkt, setzt aber vorraus, dass du den ganzen html-Code in einer Variable speicherst und diese dann in die Datei speicherst,
oder recht einfach auf der Konsole:

php deinedate.php > deinworddokument.doc


----------



## hans_schmid (24. September 2004)

> _Original geschrieben von Ben Ben _
> *[...]den ganzen html-Code in einer Variable speicherst [...]*


 Das ist ja mein eigentliches Problem.
WIe bekomme ich den generieten HTML-Code in eine Variable? Mit den ganzen file-Funktionen (fread, usw) geht's auf jeden Fall nicht.  (Der Datei wird über die URL noch ein Parameter übergeben, falls das wichtig für die Beantwortung  meiner Frage ist)
Ich steh völlig auf dem Schlauch.

MfG
Hans


----------



## hans_schmid (24. September 2004)

So, jetzt habe ich nen Weg gefunden. Für alle die es interessiert: mit ob_get_content funktioniert's.

Allerdings habe ich jetzt noch ein klitzekleines Problem. 
In das Word-Dokument werden Grafiken eingefügt. Das funktioniert auch alles wunderbar.
Nur wenn ich mir das Dokument dann auf meinen Rechner herunterlade, werden die Grafiken nicht mehr angezeigt, da sie auf meinem Rechner nicht vorhanden sind.
Wie kann ich es also schaffen, die Grafiken im Word-Dokument zu implementieren? Also so, wie wenn ich sie in Word direkt einfügen würde?

Wenn mir das noch jemand erklären könnte, bin ich wunschlos glücklich ;-) 

MfG
Hans


----------



## stanleyB (24. September 2004)

Hola!

Anderer Vorschlag:
Versuch es doch einfach mit einer Klasse, die RTF Dokumente erstellen kann. Nach dem erstellen der RTF Datei benennst du die Datei einfach von *.rtf nach *.doc um. MS Word wird keine Probleme haben, das Rich Text Format richtig interpretieren zu koennen - ausserdem klappts dann auch mit den Bildern.

Edit: Die Klasse von José Manuel SÁNCHEZ RIVERO solltest du dir ansehen.
http://phpdocwriter.sourceforge.net/index.php?lang=en

Cheers,
stanleyB


----------



## hans_schmid (24. September 2004)

Das scheint wirklich die beste Lösung zu sein.

Allerdings klappt das mit dem php Docwriter nicht, da OpenOffice instelliert sein muss, um ein RTF-File generieren zu können.

Ich hab auch mal im Net nach RTF-Klassen gesucht, bisher aber nur nutzloses oder kommerzielles gefunden.

Hat dazu evtl. noch jemand nen Tip für mich?

MfG
cyber


----------



## Blaschki (25. September 2004)

Hast du schon mal daran gedacht, den Datei als XML-Word-Datei als Oktet-Stream  
an den Client zu senden, der sie als normalen Download bekommt
Für die XML-Word-Dateien brauchst du auch kein Office auf dem Server,
sondern dich nur etwas mit dem Aufbau von solchen Dateine auseinander zu setzten.

Das kannst du am besten lernen mit :"Microsoft Office 2003 XML Reference Schemas"
*| download | *


So ein kleines Bespiel

```
<?xml version="1.0"?>
<w:wordDocument 
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">

<w:body>
        <w:p>
            <w:r>
                <w:t>Hello, World.</w:t>
        </w:r>
    </w:p>
</w:body>

</w:wordDocument>
```

Zum testen einfach in den Editor einfügen und als .doc speichern

so long Blaschki


----------



## Sanic (25. September 2004)

Besteht nicht auch die Möglichkeit, dass es ein PDF Dokument sein kann ?
Ich habe schon mit PHP/PDF gearbeitet und habe sehr gute Ergebnisse erzielt!


----------



## stanleyB (25. September 2004)

> _Original geschrieben von hans_schmid _
> *Ich hab auch mal im Net nach RTF-Klassen gesucht, bisher aber nur nutzloses oder kommerzielles gefunden.
> 
> Hat dazu evtl. noch jemand nen Tip für mich?*



http://phpclasses.php-start.de/browse/package/1805.html
Leider noch keine Erfahrungen damit.

Edit: Leider auch keine Moeglichkeit Images einzufuegen. :-(

Cheers,
stanleyB


----------



## hans_schmid (27. September 2004)

Hallo,

@stanleyB:
danke für Deine Mühe, aber es sieht wohl so aus, als müsste ich doch auf was Kostenpflichtiges zurückgreifen...


@Blaschki:
muss denn für Deine Methode noch etwas anderes als der Download "installiert" werden? Ich habe nämlich noch nie mit XML gearbeitet. Denn so wie Du's beschrieben hast, wird bei mir in Word der ganze Quelltext angezeigt und nicht "Hello World"...
Was muss ich dafür noch tun? Aus der Dokumentation wurde ich leider nicht schlau  

MfG
Hans


----------



## Blaschki (27. September 2004)

hans_schmid hat gesagt.:
			
		

> @Blaschki:
> muss denn für Deine Methode noch etwas anderes als der Download "installiert" werden? Ich habe nämlich noch nie mit XML gearbeitet. Denn so wie Du's beschrieben hast, wird bei mir in Word der ganze Quelltext angezeigt und nicht "Hello World"...
> Was muss ich dafür noch tun? Aus der Dokumentation wurde ich leider nicht schlau
> 
> ...



Die Art is wie Word seine datein normalerweise seid Word 2000 speichert und versteht.

Ich hab mal die Datei angehagen. schau sie dir mit dem Notepad mal an.


----------



## hans_schmid (28. September 2004)

hmm... bei der Datei tritt bei mir genau das beschriebene Problem auf:

*test.doc im Editor:* 







*test.doc in Word:* 





Warum wird bei mir nicht nur "Hello, World" angezeigt?

Zur Info: Windows 2000 und Word 2000 (9.0.2812)

*//EDIT:* Kann es sein, dass das ganze nur ab Word 2003 funktioniert?


> _Original von der Microsoft Homepage _
> *Über die neue XML-Funktionalität von Microsoft Office Word 2003 [...]*



MfG
hans


----------

