Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015
-
5 juin 2015 à 22:57
christianr06
Messages postés6Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention 7 juillet 2017
-
4 juil. 2017 à 17:26
Bonjour, je suis étudiante en dév info et j'ai un travail à rendre prochainement.
Il s'agit d'un formulaire html qui doit générer un fichier Word par la suite afin que le client l'enregistre sur son pc, le signe et le renvoi dans un mail en tant que pièce jointe.
On m'a conseillé d'utiliser la librairie PHPWord et c'est ce que j'ai fait.
Là je suis au niveau de la génération du doc word.
Le code des différents fichiers utilisés se présente comme suite:
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 6 juin 2015 à 18:13
Bonjour,
@eli42 : ta solution fonctionne.. à condition que le document ne soit pas un WORD (avec toutes les possibilités que word offre comparé à un "simple" document RTF.
Par contre je vois que tu as modifié le chemin vers le fichier phpword (../PHPWord.php) .. il faudra le modifier également dans le code que je t'ai donné sur CCM.
PS : Juste au cas où.. tu as testé les fichiers d'exemple fournis avec phpword ?
juste pour voir si ils fonctionnent .... ??
Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015 7 juin 2015 à 11:04
Salut Jordane! j'ai essayé d'exécuter l'exemple et ça n'a pas marché, du coup je comprends pourquoi ça bloqué dans mon exemple.
J'ai juste mis une page php avec un bouton où l'action exécute "Template.php".
Ci-dessous ce qu'on m'affiche après exécution:
Merci pour ton aide.
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 7 juin 2015 à 19:19
... vu l'url qui apparait dans ton navigateur .. c'est normal !
Tu as bien installé un serveur php sur ton pc ? un truc du genre WAMP ou EASYPHP ??
.... ensuite, il faut afficher ta page web en passant par le LOCALHOST ... et non en cliquant directement sur ton fichier php !
Si tu ne sais pas comment faire... je t'invite à commencer par regarder les tutoriels pour apprendre à utiliser ton serveur php.
C'est le BaBa..;avant même de commencer à écrire du code !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015 7 juin 2015 à 21:59
Déjà merci d'avoir remarqué ça, parce que j'arrive pas à croire que je l'ai zappé!
J'ai refais le test de l'exemple et EVIDEMMENT :) le fichier docx a été crée avec les valeurs passées du Template.php (sun, jupiter...).
J'ai refais le test avec le formulaire, les valeurs ont été affichées(voir ci-dessous):
Par contre, la valeur de la variable POST $nomClient n'a pas été transmis au document(cadré en bleu).
Qu'est ce que tu en dis Jordane45? Merci de me répondre.
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 8 juin 2015 à 10:28
Vu comment s'affiche nomclient dans ta page php ... il semble que tu aies un souci d'encodage.
il faudrait que tu mettes tes pages en UTF8.
A la limite... dans un premier temps... commence par tester sans mettre de caractères accentués dans tes input pour voir si ça fonctionne.
Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015 8 juin 2015 à 10:48
Je l'ai fait, mais jusque là c'est pas un problème d'encodage.
Si tu remarques dans le code ci-dessous de Template.php, j'ai fais le test pour $nom (=Pluto) mais çca ne passe pas alors que les autres valeurs au dessus passent sans problème.
Peux-tu stp faire le test de ton coté en utilisant ce code et en ajoutant ${nom} dans le Template.docx afin de savoir si ça vient du code ou autre chose.
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 8 juin 2015 à 11:49
De mon côté .. je viens de tester et ça fonctionne :
<?php
/*
test PHP WORD
*/
// on se met en UTF8
header('Content-Type: text/html; charset=utf-8');
//affichage des erreurs PHP
error_reporting(E_ALL);
// import de la class PhpWord
require_once 'PHPWord.php';
// VARIABLES :
$docName = "Mon_nouveau_doc.docx";
$docModele = 'Template.docx';
// r?p?tion des variables POST
$nomClient = isset($_POST['nomClient']) ? $_POST['nomClient'] : 'test nom avec accents éééèèè@@@';
$adresseFact = isset($_POST['adresseFact']) ? $_POST['adresseFact'] : '121 .....';
// le temps des tests :
echo "nomclient : ".$nomClient ;
echo "adresseFact : ".$adresseFact ;
//---------------------------------------------//
// Cr?ion du document WORD :
//---------------------------------------------//
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate($docModele);
$document->setValue('nomclient', $nomClient);
$document->setValue('adresseFact', $adresseFact);
$document->save($docName);
?>
Avec, comme document template :
The following table contains a few values that can be edited by the PHPWord_Template class. You just can edit single-line of text elements. The format and the rest of the document stay untouched.
OUI CA MARCHE!!!! Je te remercie énormemment, tu me sauves là!
Finalement, je peux boucler cette première partie.
Je ne veux pas abuser jordane45, mais je voulais te demander si je peux afficher juste après le submit la petite fenêtre de télechargement du docx (Ouvrir/Enregistrer).
Aussi pour que je reste sur ma page formulaire, je sais qu'il faut mettre action="<?php echo($_SERVER['PHP_SELF']); ?>", mais si je fais ça comment exécuter le script.php au niveau de onclick?
Merci pour ton retour.
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 8 juin 2015 à 16:42
je sais qu'il faut mettre action="<?php echo($_SERVER['PHP_SELF']); ?>"
... et bien entendu .. avoir mis le code php de ta page Template.php ... DANS la même page que ton formulaire ( ou en faire un INCLUDE ).
Pour ce qui est du téléchargement... proposes donc un LIEN vers ton fichier ... c'est plus simple à gérer.
Sinon.. tu peux essayer de faire quelque chose du genre :
//affichage des erreurs PHP
error_reporting(E_ALL);
// import de la class PhpWord
require_once 'PHPWord.php';
//Variables
$docName = "Mon_nouveau_doc.docx";
$docModele = 'Template.docx';
// recuperation des variables POST
$nomClient = isset($_POST['nomClient']) ? $_POST['nomClient'] : 'test nom avec accents éééèèè@@@';
$adresseFact = isset($_POST['adresseFact']) ? $_POST['adresseFact'] : '121 .....';
// le temps des tests :
echo "nomclient : ".$nomClient ;
echo "adresseFact : ".$adresseFact ;
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate($docModele);
$document->setValue('nomclient', $nomClient);
$document->setValue('adresseFact', $adresseFact);
// nom temporaire donné au fichier que tu créés ..
$temp_file = tempnam(sys_get_temp_dir(), 'PHPWord');
$document->save($temp_file);
// Le fichier téléchargé aura comme nom : $docName
header("Content-Disposition: attachment; filename='".docName ."'");
readfile($temp_file);
unlink($temp_file); // suppression du fichier temporaire sur le serveur
Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015
>
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023 9 juin 2015 à 11:50
Dans ton code le contenu de la page du formulaire est transmis au nouveau fichier, et non ce qui a été généré du Template.docx (voir message ci-dessous).
Comment faire pour ouvrir le fichier "Mon_nouveau_doc.docx" après qu'il soit enregistrer $document->save.... ?
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 9 juin 2015 à 13:56
Tu ne peux pas l'ouvrir en PHP (ni en javascript d'ailleurs !!!)
PHP s'exécute côté SERVEUR !
Seul le JAVASCRIPT s'exécute côté POSTE utilisateur .... mais il n'existe rien en JAVASCRIPT qui permette de lire un fichier (word ou autre.....)
Donc .. TU NE PEUX PAS !
La seule chose que tu peux faire (et il me semblait te l'avoir dit sur l'autre forum...) c'est le LIRE avec PHPWORD .. et afficher les informations dans une page web....
Mais tu ne peux pas ouvrir directement un document word depuis ton site.. impossible !
Merci pour cette information Jordane, je comprends mieux maintenant.
Mais ceci dit, est-ce que je peux enregistrer le fichier "Mon_nouveau_doc.docx" du coté utilisateur après qu'il soit généré au niveau du serveur?
Pour que l'utilisateur l'ouvre par la suite de son côté, édite, et upload, toujours dans le formulaire.
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341
>
Tl_IT
Messages postés23Date d'inscriptionjeudi 4 juin 2015StatutMembreDernière intervention 9 juin 2015 9 juin 2015 à 14:47
, est-ce que je peux enregistrer le fichier "Mon_nouveau_doc.docx" du coté utilisateur après qu'il soit généré au niveau du serveur?
christianr06
Messages postés6Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention 7 juillet 2017 Modifié le 4 juil. 2017 à 15:11
Bonjour,
Très interréssé par cette discussion
J'ai une question sur le template word
Jordane45 écrit
The following table contains a few values that can be edited by the PHPWord_Template class. You just can edit single-line of text elements. The format and the rest of the document stay untouched.
${nomclient}
${adresseFact}
Comment faites vous pour entrer ces zones ?
Si je crée un document template dotx et que je rentre des zones de fusion j'obtiens NOM : «nom»
Pourriez vous me passer le document template ?
[xxxxx@xxxx.xx]
Merci d'avance
jordane45
Messages postés37517Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention 2 juin 2023341 4 juil. 2017 à 15:25
Bonjour,
Deux ans plus tard ... tu as de la chance que j'ai conservé un suivi sur cette discussion......
Dans l'idéal tu aurais du créer ta propre discussion (en mettant le lien vers celle là éventuellement dans tes explications...)
Ensuite, phpword lit ton document et si il trouve un "texte" correspondant à la valeur cherchée ( dans notre cas ${nomclient} et/ou ${adresseFact} alors il remplace ce "texte" par ce qu'on lui a envoyé )
C'est à ça que sert la fonction