Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FORMULAIRE PHP ET INSERTION AUTOMATIQUE DANS UN DOCUMENT RTF (WORD)


Information sur la source

Catégorie :Fichier / Disque Classé sous : word, rtf, doc, insérer, mysql Niveau : Débutant Date de création : 28/06/2007 Date de mise à jour : 29/06/2007 15:50:22 Vu : 13 944

Note :
4 / 10 - par 2 personnes
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Voici le code que j'ai réussi a écire après de long moment de réflexion et d'une utilisation intensive des forums et de l'aide de chacun.

Ce code permet donc de générer un document rtf depuis un formulaire PHP.
Au début je voulais utiliser un .DOC mais trop complexe à mettre en place.
le .RTF reste la même chose pour l'utilisateur d'un point de vue mise en page.

Dans le code suivant on récupère nos variables PHP, on ouvre un document de base qui nous sert de base pour créer tous les documents, on créer un nouveau document, on insère chaque ligne du document de base en remplacant les balises par nos valeur PHP dans le nouveau document créé.

Voici le code sur clique d'un boutton classique:
 

Source

  • <?php
  • if(isset($_POST['nom_du_bouton']))
  • {
  • $nom_fic = $_POST['Nom_de_mon_fichier'];
  • $var1= $_POST['var1'];
  • $var2= $_POST['var2'];
  • $fp=fopen("reminder.rtf","r"); /*ouvre le document de base en lecture*/
  • $new=fopen("doc/".$nom_fic.".rtf","w+"); /* Créer le nouveau document dans le répertoire doc.*/
  • while(!feof($fp)) { /*Tant que je ne suis pas a la fin de mon fichier je lis ligne par ligne.*/
  • $Ligne = fgets($fp,255); /* On récupère ligne par ligne les données.*/
  • $Ligne = preg_replace("#ma_balise_1#", $var1, $Ligne);
  • $Ligne = preg_replace("#ma_balise_2#", $var2, $Ligne);
  • fputs($new,$Ligne); /* Apres avoir remplacé les balises par les valeur je les écris dans le novueau document*/
  • }
  • fclose($fp);/*Fermeture du fichier de base*/
  • fclose($new);/*Fermeture du nouveau fichier*/
  • ?>
<?php
if(isset($_POST['nom_du_bouton'])) 
{
$nom_fic = $_POST['Nom_de_mon_fichier'];
$var1= $_POST['var1'];	
$var2= $_POST['var2'];

$fp=fopen("reminder.rtf","r"); /*ouvre le document de base en lecture*/
$new=fopen("doc/".$nom_fic.".rtf","w+"); /* Créer le nouveau document dans le répertoire doc.*/
	
	while(!feof($fp)) { /*Tant que je ne suis pas a la fin de mon fichier je lis ligne par ligne.*/	
	
		$Ligne = fgets($fp,255); /* On récupère ligne par ligne les données.*/
		$Ligne = preg_replace("#ma_balise_1#", $var1, $Ligne);
		$Ligne = preg_replace("#ma_balise_2#", $var2, $Ligne);
		fputs($new,$Ligne); /* Apres avoir remplacé les balises par les valeur je les écris dans le novueau document*/

	}

	fclose($fp);/*Fermeture du fichier de base*/
	fclose($new);/*Fermeture du nouveau fichier*/

?>

Conclusion

Il vous faut donc un document de base qui vous servira pour créer tous vos documents RTF.
dans se document vous pouvez mettre des balise ma_balise_1, ma_balise_2, etc...
Ici: reminder.rtf

Si vous avez un document Word il vous suffit d'enregistrer se document au format RTF et c'est pareil.
 

Historique

29 juin 2007 15:50:22 :
<?php rajouté.

Commentaires et avis

signaler à un administrateur
Commentaire de vilhjalms le 28/06/2007 18:11:20

Petites choses :
<?php au lieu de <?
if(isset($_POST['...']) && !empty($_POST['...'])){
    [...]
}
Autrement pour les fichiers doc une solution suivant la configuration :

<?php
// créer une référence à un nouveau composant COM (Word)
$word = new COM("word.application") or die("Can't start Word !");

// afficher la version de Word en cours d'utilisation
echo "Loading Word, v. {$word->Version}";

// définir la visibilité de l'application sur 0 (faux)
// pour ouvrir l'application au premier plan, utiliser 1 (vrai)
$word->Visible = 0;

// créer un nouveau document dans Word
$word->Documents->Add();

// ajouter du texte au nouveau document
$word->Selection->TypeText("Testing 1-2-3...");

// enregistrer le document dans le dossier temp de Windows
$word->Documents[1]->SaveAs("comtest.doc");

// fermer la connexion au composant COM
$word->Quit();

// afficher un autre message à l'écran
echo "Check for the file...";
?>

signaler à un administrateur
Commentaire de coucou747 le 28/06/2007 18:54:57

euh... c'est un simple str_replace... tu mets ereg sans savoir ce que c'est... ni meme avoir lu la doc a ce sujet, sinon t'aurais vu que ca pouvait prendre un array comme argument...

dans mon livre sur le php, on a le meme code, mais en moins crade, ainsi, ca aurait plus sa palce dans un tuto que dans une source

1/10

signaler à un administrateur
Commentaire de Slyders le 29/06/2007 10:32:17

vilhjalms: les objets COM nécéssite apache 2 et PHP 5 ce qui n'est pas forcément les contraintes d'environnement pour tout le monde. Comme pour mon cas ou je ne pouvais pas tout faire migrer.

coucou747 : Galère de trouver du code sur internet qui marche et des explication claire pour insérer du PHP dans des rtf et que cela soit transparent pour l'utilisateur. Qui plus est on a pas tous des bouquins PHP chez soi. Oui peut être dans Tuto...

signaler à un administrateur
Commentaire de garfield90 le 29/06/2007 17:11:40

un fichier RTF est un simple fichier texte normaliser donc aucun soucis, y a des multitude de tuto sur l'écriture de fichier et sur le remplacement de chaine de caractères.

// version PHP4
ob_clean();
readfile('/chemin/vers/mon/fichier');
$content = ob_flush_content();
ob_end_clean();
$fp = fopen('/chemin/vers/autre/fichier', 'w');
fwrite($fp, str_replace(array('aRemplacer1','aRemplacer2'), array('remplace1', 'remplace2'), $content));
fclose($fp);


//version PHP5
file_put_content('/chemin/vers/autres/fichier', str_replace(array('aRemplacer1','aRemplacer2'), array('remplace1', 'remplace2'), file_get_contents('/chemin/vers/fichier')));

En tout cas, ca devrait a vu de nez fonctionné.
Bien sur avant tu dois .
- verifier la presence de /chemin/vers/fichier et etre sur que c'est un fichier lisible
- etre sur que /chemin/vers/autres/fichier est modifiable et dans ce cas la etre sur aussi que le modifier n'a pas d'incidence.
- vérifier les valeurs que tu récuperes via $_GET, $_POST, $_SESSION etc.
- ...

signaler à un administrateur
Commentaire de surfjohakuth le 12/07/2007 18:01:56

Petite question: si on utilise pas un bouton mais une image sur laquelle on clique pour effectuer la même opértion, comment se transforme la condition "if(isset($_POST['nom_du_bouton'])) "??
Code de l'image:
echo "<form class=\"form\" action=\"../bin/generate_devis_txt.php\" method=\"GET\">\n" ;
echo "<input type=\"hidden\" name=\"idd\" value=\"$iddevis_temp\">\n" ;
echo "<input type=\"hidden\" name=\"idc\" value=\"$idclient_temp\">\n" ;
echo "<input class=\"img\" type=\"image\" name=\"devis\" src=\"../design/txt.jpg\" alt=\"G&eacute;n&eacute;rer le devis en txt\">\n" ;
echo "</form>\n" ;

signaler à un administrateur
Commentaire de Slyders le 13/07/2007 09:44:46

Tu met tout ton code dans une page PHP, par exemple genere.php
Tu lui met les balises <? ...ton_conde... ?> et c tout.
avec ton image tu appel cette page.
<a href="genere.php"><img style="cursor:hand;" src="monimage.JPG" border="0"></a>



si tu as des variables PHP a passer il faut:
<img style="cursor:hand;" src="img/enregistrer.JPG"onclick="go();">

et

<SCRIPT language=JavaScript>
function go()
{
window.location.href= "majcircuit.php?F1="+couleur[0]+"&F2="+couleur[1]+"&F3="+couleur[2];
}
</SCRIPT>

Mais il y a certainement des solutions plus simple. En tout cas je ne connais que sa.

signaler à un administrateur
Commentaire de stay le 21/08/2007 17:56:53

#surfjohakuth, en voici une très simple;

<a href="#" onClick = "document.forms.NOMduFORM.submit()"><img src="" alt="" /></a>

#plus besoin d'input de type submit :-)

signaler à un administrateur
Commentaire de baborge77 le 06/11/2007 11:54:02

Bonjour à toutes & tous

C'est cool ton truc Slyders, et facilement parametrable...

Je voulais l'utiliser pour faire du publipostage avec PHP

Mais,

Ce que je n'arrive pas à faire sur le fichier final, c'est inserer un saut de page entre chaque courrier...

Si qqun a une solution a me proposer, je suis preneur?


Merci d'avance pour vos reponses, et encore merci à Slyders pour son source

signaler à un administrateur
Commentaire de Slyders le 06/11/2007 18:49:29

Il faut ecrire dans ton fichier RTF le code suivant ou tu veu: \par \page \hich\af0\dbch\af11\loch\f0

c'est le code pour faire un saut de page selon Word.

J'espère t'avoir un peu aidé... ^^

signaler à un administrateur
Commentaire de baborge77 le 07/11/2007 13:24:14

Merci, Slyders pour ta reponse

j'ai un autre soucis,
la mise en forme ne correspond pas au modele

et surtout, une de mes variable est un paragraphe mis en forme avec des balises 'HTML'.
Comment les transformer?


signaler à un administrateur
Commentaire de Slyders le 08/11/2007 18:09:29

J'ai pas bien compris ton problème mais tu devrais enregistrer ton modèle en RTF et voir avec le bloc-note comment c'est écrit dedans pour faire ce que tu veu en PHP.

signaler à un administrateur
Commentaire de baborge77 le 09/11/2007 10:57:49

Re

Je vais essayer d'etre clair ...

Je veux utiliser ton truc (sans etre péjoratif...) pour creer des courriers en publipostage:
C'est à dire:
1- Modèles de contenu de courrier, (mise en forme html)correspondant à la variable <#contenuClient#>:
---------------------------------------------------------------------------------------
<p align="left">
suite à notre communication ....
</p>
<p align="center">
<img src=".../image.jpg" border=0 />
</p>
<p align="left">
<font size="-2" color="#FF0000">blabla </font>
blabla <#Adresse#> blabla ...  etc.
</p>
---------------------------------------------------------------------------------------

2- Modèle RTF pour la mise en forme du courrier:
Fichier Modele.RTF:
---------------------------------------------------------------------------------------
                          <#Civilite#> <#Nom#>
                          <#Adresse#>
                          <#Ville#>

                          <#VilleAgence#>, le <#Date#>,



<#Civ#>,

                          <#contenuClient#>

                          <#NomConseiller#>,
                          <#TelConseiller#>

---------------------------------------------------------------------------------------

Le soucis, c'est que les balises html ne sont pas reconnues lors de l'insertion dans le fichier RTF


J'ai donc repris ta méthode avec un fichier ".txt"(contenant la mise en forme au format html) à la place du ".RTF" et cela fonctionne bien pour la création du document final sur le site. Je cherche maintenant à transformer un fichier ".html" en ".doc" pour pouvoir proposer le téléchargement de ce dernier.

Fichier Modele.txt:
---------------------------------------------------------------------------------------
<p>&nbsp;</p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
          <blockquote>
            <p><strong><#Civilite#> <#Nom#></strong><br>
              <strong><#Adresse#></strong><br>
              <strong><#Ville#></strong><br><br>
     <strong><#VilleAgence#>, le <#Date#>,</strong></p>
              <br><br>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
<p>
<blockquote>
    <strong><#Civ#>,</strong>
</blockquote></p>
<p><strong><#contenuClient#></strong> </p>
<p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
        <blockquote>
            <strong><#NomConseiller#>, </strong><br>
            <strong><#TelConseiller#></strong>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
</p>
---------------------------------------------------------------------------------------

Pour insérer les saut de page, j'ai utilisé du CCS:
---------------------------------------------------------------------------------------
<br style="page-break-after:always" />
---------------------------------------------------------------------------------------




signaler à un administrateur
Commentaire de baborge77 le 09/11/2007 11:16:07

VOILA UN EXEMPLE DE RESULTAT:
---------------------------------------------------------------------------------------<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'><title>Courrier</title></head><body><p>&nbsp;</p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
          <blockquote>
            <p><strong>Mr NOM Prenom</strong><br>
              <strong>10  RUE DE PARIS</strong><br>
              <strong>PARIS</strong><br><br>
     <strong>PARIS, le vendredi  9 novembre 2007,</strong></p>
              <br><br>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
<p>
<blockquote>
    <strong>Monsieur,</strong>
</blockquote></p>
<p><strong><P align=center>suite à notre communication .... </P>
<P align=center><img src=".../image.jpg" border=0 /> </P>
<P align=center><FONT color=#ff0000>blabla</FONT> </P>
<P align=center>blabla 10  RUE DE PARIS blabla ...  etc. <BR></P></strong> </p>
<p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
        <blockquote>
          <strong>Votre Conseiller</strong><br>
            <strong>Prenom NOM, </strong><br>
            <strong>00.00.00.00.00</strong>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
</p>
<br style="page-break-after:always" />
<p>&nbsp;</p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
          <blockquote>
            <p><strong>Mr NOM2 Prenom2</strong><br>
              <strong>12  RUE DE PARIS</strong><br>
              <strong>PARIS</strong><br><br>
     <strong>PARIS, le vendredi  9 novembre 2007,</strong></p>
              <br><br>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
<p>
<blockquote>
    <strong>Monsieur,</strong>
</blockquote></p>
<p><strong><P align=center>suite à notre communication .... </P>
<P align=center><img src=".../image.jpg" border=0 /> </P>
<P align=center><FONT color=#ff0000>blabla</FONT> </P>
<P align=center>blabla 12  RUE DE PARIS blabla ...  etc. <BR></P></strong> </p>
<p>
<blockquote>
  <blockquote>
    <blockquote>
      <blockquote>
        <blockquote>
        <blockquote>
          <strong>Votre Conseiller</strong><br>
            <strong>Prenom NOM, </strong><br>
            <strong>00.00.00.00.00</strong>
        </blockquote>
        </blockquote>
      </blockquote>
    </blockquote>
  </blockquote>
</blockquote>
</p>
</body></html>
---------------------------------------------------------------------------------------
Je veux passer sous word pour pouvoir proposer aux utilisateurs, de créer leurs fichiers WORD.

Donc mon nouveau "soucis":  Tranformer un fichier "HTML" en fichier "DOC"?

Je continue de chercher de mon coté, si je trouve la solution je déposerai l'ensemble...

signaler à un administrateur
Commentaire de Slyders le 09/11/2007 14:34:40

Merci pour le flood du code, pose ta question sur le Forum ça n'a rien avoir avec la source.
Sinon je sais pas dsl.

signaler à un administrateur
Commentaire de baborge77 le 09/11/2007 19:05:35

oki

encore merci

signaler à un administrateur
Commentaire de kirtap le 08/10/2008 12:55:46

A propos du commentaire de vilhjalms le 28/06/2007, et dont j'ai fait l'essai:

<?php
// créer une référence à un nouveau composant COM (Word)
$word = new COM("word.application") or die("Can't start Word !");

Pour un source en PHP donc portable sur n'importe quelle plateforme et indépendant des logiciels installés, je n'étais pas trop chaud.

Avant de l'uploader sur mon serveur LAMP, j'ai quand même testé sur mon PC Wintel (XP Pro SP2, suite MS Office Pro, EasyPHP)...
-> BOUM, la fenêtre suivante apparaît: "Visual Studio Just-in-time Debugger
An unhandled win32 exception occured in Apache.exe [4604] (...)"

Quelqu'un peut il m'indiquer ce que ça donne sur MacOS ?

signaler à un administrateur
Commentaire de Profite le 04/11/2008 14:16:34

Je fais des recherches et ta source est la seule que j'arrive à faire tourner.

Malheureusement, je ne comprends pas comment faire pour que toutes les lettres pour mes utilisateurs soit les unes à la suite des autres.

Tu expliques : "Il faut ecrire dans ton fichier RTF le code suivant ou tu veu: \par \page \hich\af0\dbch\af11\loch\f0"

Cependant, je ne comprends pas comment adapter ta source.

Peux-tu m'aider ?

Merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

réduction d'un doc [ par babybutt ] bonjour a tous j'aimerais savoir comment on fait pour un document word ou ppt à la taille d'un cadre ?je m'explique, j'ai deux iframe, Cadre 1 c une Enregistrer dans mysql upload fichier [ par jeiragne ] Bonjour et merci de me répondre,j'essaye d'enregistrer un .doc (fichier word) dans un champ blob de mysql mais le problème est que je ne sais pas où e n'arrive a ouvrir un .doc sur serveur avec un poste client [ par shakaka ] Bonjour tout le monde.Voila mon pb est le suivant: J'utilise le COM pour ouvrir un fichier doc (script php 4) sur mon serveur.Je teste sur le serve et Problème pour insérer des valeurs dans BDD MYSQL [ par fredo35m ] Bonjour,j'ai un soucis pour ins&#233;rer des valeurs dans ma base de donn&#233;es, en effet mon programme fonctionne bien hormis lorsque mon champ &#2 Doc MySql [ par DuncanIdaho ] Salutje cherche de la doc sur MySQL : je voudrais savoir comment faire pour, par ex : savoir si une table existe, savoir si un champs existe dans une fichier word à la volée [ par zarbiman ] Salut à tous et à toutes! voilà mon problème:sur ma page, il y a un bouton. quand je clique sur ce bouton, je renvoie à une page fichier.php qui géner De doc vers XML, un algo? [ par EricLeRouge ] Bonjour, afin d'exploiter des donn&#233;es d'un documment word, j'aimerai le convertir en XML via php. Existe t il un algo?Je ne connais pas le XML, m Creation d'un doc word dynamique a partir d'un formulaire [ par jejenat ] Bonjour,Je dois creer dans word la replique exacte du formulaire . J'ai essaye l'objet com msword avec les fonctions associ&#233;esmais il me renvoie bouton "parcourir" pour insérer une photo en php [ par webinitiatives ] je cherche un script pour insérer une photo dans une galerie qui est en php, dans mon administration j'ai un formulaire pouvant insérer des tables dan Classer les résultats d'une table mysql [ par tony1239456 ] Bonjour, je voudrais savoir comment classer les r&#233;sultats d'une requ&#234;te mysql du plus grand nombre (le nombre se situe &#224; l'interieur d'


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,499 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.