word dokument mit mysql daten füllen

Diskordier

Neu angemeldet
Registriert
14 Juli 2013
Beiträge
161
Hallo leute ich versuche ein Word dokument -> office 2013 per php mit daten aus einer mysql zu füllen.

Zum anfang hab ich einfach ein word Dokument erstellt und %hallo% als Platzhalter rein geschrieben, dieses habe ich dann als .rtf abgespeichert.

mein php code sieht nun so aus das ich die rtf per file get content einlese und den platzhalter mit etwas anderem ersetzte.

Danach soll der code das .rtf wieder zu einem.doc wandeln.

[src=php]header("Content-Type: application/msword");
// die einzulesene datei (word-rtf-template)
$content = file_get_contents("hallo.rtf");
// der string %hallo% soll durch die variable $text ersetzt werden
$text = "tester";
$content = str_replace('%hallo%',$text,$content);
// und jetzt soll der ganze ausgegeben werden
//echo $filename;

header('Content-Type: application/rtf;charset=utf-8');
header('Content-Disposition: attachment; $content="hallo.doc"');
print $content;[/src]

nach dem ausführen des codes wird die hallo doc runtergeladen und per word geöffnet, aber darin stehen weiterhin unüberblickbare zeichen wie wenn man es als .rtf abspeichert.


Wo ist mein Fehler das es nicht funktioniert ?
 
Zuletzt bearbeitet:
Du findest einen funktionierenden Code, der genau das macht was du versuchst zu tun, in der Open Source Anwendung Hoteldruid, die du kannst.

Du musst bitte selbst nach der richtigen Stelle im Code suchen, aber soweit ich mich erinnere findest du ihn in einem dieser Files:

  • ./modifica_contratto.php,
  • ./visualizza_contratto.php oder
  • ./includes/funzioni_contratti.php
 
  • Thread Starter Thread Starter
  • #3
Danke :) Aber ehrlich gesagt finde ich mich in diesen unmengen an code nicht zurecht zudem ist es noch mal schwerer zu verstehen da alles in Italienisch ist.
 
Erzähl mir davon .. hab für einen Auftraggeber zwei Jahre an diesem Ungetüm herumgeschraubt. Das Gute daran, ich kann jetzt ein bisschen Italienisch ;)

Der Code steckt aber irgendwo in einem dieser Files, es wär also einen Versuch wert.
 
  • Thread Starter Thread Starter
  • #5
Ist dies den auch für docx gedacht da ich ja office 2013 word dokument nutzen will. ?

--- [2015-05-13 17:03 CEST] Automatisch zusammengeführter Beitrag ---

So wie ich das sehe muss ich zuerst die docx eintpacken und das document.xml extrahieren, dort kann ich dann platzhalter einbauen und diese mit php mit werten füllen. Danach mus sich die document.xml wieder in das docx file einpacken und dann ausgeben.
 
Diskordier, du wärst vermutlich leichter daran nach einem Plugin für PHP zu suchen das so ein Datenformat ausgeben kann.

Ich hab auf die schnelle, neben dem kostenpflichtigen PHPdocx, auch das hier gefunden:


Allerdings kann ich dir dazu auch keine Tips geben, scheint aber obwohl es 2007 xls Dateien sind alles mögliche zu unterstützen was man so brauchen kann. (Siehe Features)
 
Ist dies den auch für docx gedacht da ich ja office 2013 word dokument nutzen will. ?

Nein, leider nicht. Du hast im Startpost von RTF gesprochen, bin jetzt davon ausgegangen. Du kannst aber RTF natürlich mit Office 2k3 öffnen. Ich denke aber, die Variante ist weit weniger aufwendig als mit docx zu arbeiten.
 
Was möchtest Du denn genau mit dem DOCX-Dokument erreichen? DOCX ist ein proprietäres Format und wurde von Microsoft nicht umsonst so gemacht, dass es möglichst keine Software außer Microsoft Word verstehen kann. Du schaffst Dir damit also von vorneherein die folgenden Probleme:

1. Das Dokument zu generieren, ist -wie Du schon gemerkt hast- schwierig bis unmöglich (vor allem wenn besondere Formatierungen zum Einsatz kommen sollen).
2. Nieman kann das Dokument problemlos lesen, außer denen, die Microsoft Word besitzen. Du sperrst damit nicht nur alle Linux- und Mac-User aus, sondern auch alle Handys und Tablets und eben alle, die Windows zwar haben, aber kein Word.

Die einzige Umgebung, wo ich auf einer Website ein Word-Dokument heutzutage noch anbieten würde, wäre in einem Unternehmensnetzwerk wo sichergestellt ist, dass jeder Office mit einer bestimmten Version und allen benötigten Schriftarten installiert hat.

Auf einer öffentlichen Website sollte man generierte Dokumente imho in einem Dateiformat ausliefern, das jeder lesen kann. Z. B. PDF bei statischen Dokumenten (evtl. mit Formularelementen, falls bestimmte Felder bearbeitbar sein sollen). Oder eben etwas anderes, je nach gewünschtem Anwendungszweck (deswegen auch die Frage oben).
 


Wobei das hochzutage mit Dingen wie OpenOffice oder LibreOffice (vermut) doch kein Problem mehr sein sollte generelle Excel Dateien zu lesen oder?
Auf mobilen Geräten sieht es dahingegen wirklich mau aus, da gebe ich dir Recht und würde auch zu PDF raten. Aber es geht Diskordier vermutlich um die Auswertung von etwas, daher Excel?
So jedenfalls meine Annahme.
 
öhm wo hast du denn das her thom53281? Normal bist du besser informiert *g*
das galt für Doc - aber Docx / xlsx usw. sind offene Formate - und zur not (je nachdem wie komplex das Dokument ist das man ausgeben möchte) kann man die Aussage ohne Probleme selber schreiben...

alle neuren Office-Formate sind -zip komprimierte Ordner mit XML-Dateien. (Einfach mal in .zip umbenennen und drin schmökern)
Wer Lust hat den ganzen Standard zu lesen - kann das hier tun ^^


Hier hast du eine recht ausgereifte php-Klasse die aus einem Output den du per html formatieren kannst ein docx erstellt:
 
öhm wo hast du denn das her thom53281? Normal bist du besser informiert *g*
Ich habe Microsoft Office bereits vor 7 Jahren abgeschworen. :o
Hatte daher seitdem zugegebenermaßen nur noch gelegentlich solche Dateien in der Hand und bin davon ausgegangen, dass sich DOCX ähnlich zum früheren DOC verhält. Da hab ich mich wohl geirrt, danke für die Korrektur. Zumindest hat es sich so angefühlt, als ich das letzte Mal eine solche Datei mal mit LibreOffice geöffnet habe. Ist aber auch schon etwas her.

Dennoch würde ich trotzdem von solchen Dateiformaten abraten, da diese vom Funktionsprinzip her nicht garantieren können, dass das Dokument beim Endbenutzer zu 100% so aussieht, wie in der Vorlage auf dem eigenen Monitor. Z. B. wenn auf dem Fremdsystem nicht die selben Schriftarten installiert sind. Daher wäre hier trotzdem PDF imho empfehlenswerter.

Aber es geht Diskordier vermutlich um die Auswertung von etwas, daher Excel?
Im Startbeitrag steht zumindest was von Word-Dokument und nicht von Excel.
 
Ja kommt vor allem auf den Einsatzzweck an - evtl. sollen die Dokumente ja danach dann in Word weiter verarbeitet werde - wenn er schon die word version so genau weiß wird der Einsatzzweck kein öffentlicher sein ^^
 
Soetwas habe ich erst kürzlich in einem Projekt mit umgesetzt. Damit lassen sich Openoffice und MsOffice Templates befüllen.

Hier noch ein bisschen Beispielcode aus meinem Projekt:
[src=php]<?php
$TBS = new clsTinyButStrong();
$TBS->Plugin(TBS_INSTALL, OPENTBS_PLUGIN);

// DOCX-Template laden
// und Fehlermeldungen beim Öffnen des Templates abfangen
$TBS->SetOption('noerr', true);
$TBS->LoadTemplate('Template.docx', OPENTBS_ALREADY_UTF8);
if($TBS->ErrCount > 0){
throw new Exception('Das Template konnte nicht geöffnet werden.');
return;
}
$TBS->SetOption('noerr', false);

// Vorlagen-Debugging
#$debug = 'info';
// Display the intented XML of the current sub-file, and exit.
if (isset($debug) && ($debug=='current')) $TBS->Plugin(OPENTBS_DEBUG_XML_CURRENT, true);
// Display information about the document, and exit.
elseif (isset($debug) && ($debug=='info')) $TBS->Plugin(OPENTBS_DEBUG_INFO, true);
// Tells TBS to display information when the document is merged. No exit.
elseif (isset($debug) && ($debug=='show')) $TBS->Plugin(OPENTBS_DEBUG_XML_SHOW);

// Daten
$data = array();
$data[] = array('Vorname'=>'Max', 'Nachname'=>'Mustermann');

// Platzhalter im Template ersetzen
// Im Template können diese Platzhalter verwendet werden: [Kunde.Vorname][Kunde.Nachname]
$TBS->MergeBlock('Kunde', $data);

// befülltes Template ausgeben
$TBS->Show(OPENTBS_DOWNLOAD, 'Dateiname.docx');
exit();
?>[/src]
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #14
Was möchtest Du denn genau mit dem DOCX-Dokument erreichen? .

Nun ja wenn möglich danach ausdrucken, und bestenfalls noch etwas nach bearbeiten vor dem Drucken, aber stimmt schon besser wäre ein Format zu wählen das auch wirklich jeder anwender öffnen kann.

Vielen Dank ich schau mir mal eure bsp an Leute.

Evtl wäre es vielleicht auch ratsam das ganze in einem pdf template wie einige hier schreiben zu befüllen?

Weil das kann ja dann wirklich jeder öffnen.
 
oder als html-Datei? Die kann auch jeder öffnen.

Oder am billigsten: txt, falls du keine Formatierung brauchst.
 
  • Thread Starter Thread Starter
  • #16
Doch das brauche ich, also txt kommt daher nicht ;)
 
das galt für Doc - aber Docx / xlsx usw. sind offene Formate
Offen im Sinne von "wir haben dem ISO-Komitee soviel Schmiergeld bezahlt bis unsere 6000-Seiten-kann-niemand-ausser-uns-implementieren-Spezifikation als Standard angenommen wurde" ...............

:T
 
  • Thread Starter Thread Starter
  • #18
Okay das mit word scheint keine sinnvolle Lösung zu sein. ich denke mit pdf wäre es die bessere lösung da dies der kunde dann direkt runterladen kann.

jedoch weiss ich noch nicht genau wie.
Ich kann mit fpdf und fpdi ein existierendes pdf mit php einlesen aber ich hab noch nicht raus gefunden wie ich sinnvoll die Platzhalter ersetzen kann.

mein Pdf template soll ungefähr so aussehen

pdf test template.JPG

ich denke str_replace("$$$$f_bes_k" ist dabei keine Sinnvolle möglichkeit.

Hat da wer eine leicht umzu setzende Lösung ?
 
Wozu Platzhalter ersetzen. FPDF ist super dokumentiert und man kann relativ schnell komplexe Designs erstellen.
Ich hab mir das gestern angeschaut und konnte innerhalb von 3-4 h mein komplettes Rechnungsdesign darin umsetzen
 
Zurück
Oben