• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

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:

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
Du findest einen funktionierenden Code, der genau das macht was du versuchst zu tun, in der Open Source Anwendung Hoteldruid, die du hier herunterladen 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
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • 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.
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
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.
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • 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.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
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:
http://phpexcel.codeplex.com/

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)
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
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.
 

thom53281

SYS64738
Teammitglied

Registriert
14 Juli 2013
Beiträge
6.923
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).
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
@thom53281:

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.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.760
Ort
in der Zukunft
ö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 ^^
http://www.ecma-international.org/publications/standards/Ecma-376.htm

Hier hast du eine recht ausgereifte php-Klasse die aus einem Output den du per html formatieren kannst ein docx erstellt: http://www.phpclasses.org/package/8991-PHP-Create-DOCX-Word-document-dynamically-from-HTML.html
 

thom53281

SYS64738
Teammitglied

Registriert
14 Juli 2013
Beiträge
6.923
ö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.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.760
Ort
in der Zukunft
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 ^^
 

X-Coder

Aktiver NGBler

Registriert
14 Juli 2013
Beiträge
149
Soetwas habe ich erst kürzlich in einem Projekt mit opentbs für tinybutstrong 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:

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • 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.
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
347
oder als html-Datei? Die kann auch jeder öffnen.

Oder am billigsten: txt, falls du keine Formatierung brauchst.
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • Thread Starter Thread Starter
  • #16
Doch das brauche ich, also txt kommt daher nicht ;)
 

Commodo

NGBler

Registriert
17 Mai 2014
Beiträge
151
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
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • 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 ?
 

sharpy35

Neu angemeldet

Registriert
13 Apr. 2015
Beiträge
210
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
 
Oben