begin process at 2012 02 11 17:09:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :18 969

Auteur : Slyders

Ecrire un message privé
Commentaire sur cette source (22)
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é.

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

 Sources en rapport avec celle ci

Source avec Zip CLASS PHP :: REQUÊTES MYSQL par devgoneti
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
Source avec Zip Source avec une capture EL COYOTOS LIVRE D'OR PHP 5 par elcoyotos
Source avec Zip CLASS MYSQL 5/PHP5 AVEC GESTION DES EXCEPTION ET DES REQUÊTE... par devil_may_cry
Source avec Zip Source avec une capture PAGINATION JAVASCRIPT PHP MYSQL par cod57

Commentaires et avis

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...";
?>

Commentaire de coucou747 le 28/06/2007 18:54:57 administrateur CS

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

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...

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.
- ...

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" ;

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.

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 :-)

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

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é... ^^

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?


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.

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" />
---------------------------------------------------------------------------------------




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...

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.

Commentaire de baborge77 le 09/11/2007 19:05:35

oki

encore merci

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 ?

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

Commentaire de ofillion le 11/11/2009 23:09:35

La source de Slyders fonctionne nickel dans mon cas.  Toutefois, j'aimerais aller un peu plus loin.  Comme je ne veux pas que le nouveau fichier créé reste sur le serveur, je voudrais faire le traitement en 3 étapes :

1- Générer le fichier
2- Ouvrir le fichier automatiquement
3- Supprimer le fichier du serveur.

Est-ce possible d'automatiser le tout???  Pour le visiteur, je souhaite que tout soit transparent.  Du genre il clique, le fichier s'ouvre et il peut l'enregistrer sur son disque, c'est tout.

Merci beaucoup !

Commentaire de Slyders le 12/11/2009 14:01:09

Bonjour,

c'est une source qui a déjà 3 ans, je ne saurai te répondre, dsl

Slyders.

Commentaire de baborge77 le 12/11/2009 17:52:08

Bonsoir,

pour ma part, j'ai utiliser ce code en fin de génération du document:
---------------------------------------------------------------
$SRC_FILE = $nom_fic .".rtf";
$filename = basename($SRC_FILE);
header("Content-Type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=$filename");
@readfile($SRC_FILE);
---------------------------------------------------------------

Commentaire de baborge77 le 12/11/2009 17:58:45

Re,

Pour la suppression du fichier sur le serveur, j'ai ajouter un sc ript sur la page d'envoi pour supprimer le fichier (s'il existe)...

--------------------------------------------------------------
<?php
if (file_exists($nom_fic .".rtf")){unlink($nom_fic.".rtf");}
?>

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

Commentaire de ofillion le 12/11/2009 23:04:00

Génial !

Merci, ca fonctionne à merveille !

 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,650 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales