php : générer du texte mis en forme
Dernière réponse : dans Programmation
Bonjour,
Un nouveau problème se pose à moi :
Il faudrait que les utilisateurs de mon site en php puissent par un simple clic obtenir un document texte avec entete de lettre (en fonction d'infos contenues dans la base), et retravailler dessus avec leur logiciel habituel (Word, j'en ai bien peur...).
Est-ce que quelqu'un aurait une idée du meilleur format à générer? le rtf a l'air assez complexe, le .doc assez contestable et brouillon...
Merci d'avance
Un nouveau problème se pose à moi :
Il faudrait que les utilisateurs de mon site en php puissent par un simple clic obtenir un document texte avec entete de lettre (en fonction d'infos contenues dans la base), et retravailler dessus avec leur logiciel habituel (Word, j'en ai bien peur...).
Est-ce que quelqu'un aurait une idée du meilleur format à générer? le rtf a l'air assez complexe, le .doc assez contestable et brouillon...
Merci d'avance
Autres pages sur : php generer texte mis forme
Lassé par la pub ? Créez un compte
Ca y est, j'ai réussi à générer du rtf!
Pour ceux que ça intéresse, voilà comment je m'y suis pris :
1.J'ai créé un document type dans Word, enregistré en rtf, avec mes images et tout...
2. Je l'ai ouvert dans un éditeur de texte, et j'ai remplacé tous les \n, \t, et \r par \\n, \\t et\\r (pour éviter que php échappe des lettres du code).
3.J'ai écrit un programme tout con avec fopen($nom_fichier, "w") et fwrite($fichier, "le_code_du_rtf_que_je_viens_de_modifier");
4. J'ai remplacé les endroits clés du texte par mes variables
Et voilà, ça marche, un header pour qu'il s'ouvre automatiquement, et c'est fini.
En espérant que ça servira à quelqu'un...
Pour ceux que ça intéresse, voilà comment je m'y suis pris :
1.J'ai créé un document type dans Word, enregistré en rtf, avec mes images et tout...
2. Je l'ai ouvert dans un éditeur de texte, et j'ai remplacé tous les \n, \t, et \r par \\n, \\t et\\r (pour éviter que php échappe des lettres du code).
3.J'ai écrit un programme tout con avec fopen($nom_fichier, "w") et fwrite($fichier, "le_code_du_rtf_que_je_viens_de_modifier");
4. J'ai remplacé les endroits clés du texte par mes variables
Et voilà, ça marche, un header pour qu'il s'ouvre automatiquement, et c'est fini.
En espérant que ça servira à quelqu'un...
J'ai pas d'exemple à proposer, mais je peux essayer de résumer le code :
1. Tu fais un modèle de document Word que tu enregistres en rtf
2. Tu ouvres ce document avec un éditeur de texte quelconque (le Bloc-note fait très bien l'affaire, Wordpad aussi...)
3. Tu remplaces tous les slashes par des doubles slashes (pour que php n'imterprète pas les /n par exemple comme des retours à la ligne, il remplace tous les doubles slashes par des simples), en utilisant par exemple "chercher/remplacer"
4. Tu remplaces ce que tu as écrit dans ton document par tes variables
4. Tu commences ta page php, qui écrit ce que tu viens de faire dans un fichier :
Voilà un exemple qui devrait t'afficher une petite page qui inscrit en rouge ce que tu mets dans la variable $variable. je ne l'ai pas essayé, mais logiquement ça devrait marcher. Je crois que je ne peux pas être plus précis.
1. Tu fais un modèle de document Word que tu enregistres en rtf
2. Tu ouvres ce document avec un éditeur de texte quelconque (le Bloc-note fait très bien l'affaire, Wordpad aussi...)
3. Tu remplaces tous les slashes par des doubles slashes (pour que php n'imterprète pas les /n par exemple comme des retours à la ligne, il remplace tous les doubles slashes par des simples), en utilisant par exemple "chercher/remplacer"
4. Tu remplaces ce que tu as écrit dans ton document par tes variables
4. Tu commences ta page php, qui écrit ce que tu viens de faire dans un fichier :
<?php
//récupération des critères envoyés par formulaire
//connexion à la base de données
//extraction des infos (requête + attribution des variables)utilisées dans le document
//ici, ça affichera : gilbert
$variable="Gilbert";
//création et ouverture du fichier sur le serveur :
$nom_fichier='exemple.rtf';
$fichier=fopen($nom_fichier, "w");
//on inscrit le code rtf avec les doubles slashes et les variables dans le fichier :
fwrite($fichier,"{\\rtf1\\ansi\\ansicpg1252\\uc1 \\deff0\\deflang1033\\deflangfe1036{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}{\\f16\\froman\\fcharset238\\fprq2 Times New Roman CE;}{\\f17\\froman\\fcharset204\\fprq2 Times New Roman Cyr;}
{\\f19\\froman\\fcharset161\\fprq2 Times New Roman Greek;}{\\f20\\froman\\fcharset162\\fprq2 Times New Roman Tur;}{\\f21\\froman\\fcharset186\\fprq2 Times New Roman Baltic;}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;
\\red0\\green255\\blue0;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\\red128\\green128\\blue0;
\\red128\\green128\\blue128;\\red192\\green192\\blue192;}{\\stylesheet{\\widctlpar\\adjustright \\fs20\\lang1036\\cgrid \\snext0 Normal;}{\\*\\cs10 \\additive Default Paragraph Font;}}{\\info{\\title Ceci est un exemple qui affiche la variable \\'ab variable \\'bb :}
{\\author XXX}{\\operator XXX}{\\creatim\\yr2005\\mo7\\dy25\\hr13\\min34}{\\revtim\\yr2005\\mo7\\dy25\\hr13\\min35}{\\version1}{\\edmins1}{\\nofpages1}{\\nofwords0}{\\nofchars0}{\\*\\company XXX}{\\nofcharsws0}{\\vern113}}
\\paperw11906\\paperh16838\\margl1417\\margr1417\\margt1417\\margb1417 \\deftab708\\widowctrl\\ftnbj\\aenddoc\\hyphhotz425\\formshade\\viewkind1\\viewscale100\\pgbrdrhead\\pgbrdrfoot \\fet0\\sectd \\linex0\\headery709\\footery709\\colsx709\\endnhere\\sectdefaultcl {\\*\\pnseclvl1
\\pnucrm\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}{\\*\\pnseclvl2\\pnucltr\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}{\\*\\pnseclvl3\\pndec\\pnstart1\\pnindent720\\pnhang{\\pntxta .}}{\\*\\pnseclvl4\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxta )}}{\\*\\pnseclvl5
\\pndec\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl6\\pnlcltr\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl7\\pnlcrm\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl8\\pnlcltr\\pnstart1\\pnindent720\\pnhang
{\\pntxtb (}{\\pntxta )}}{\\*\\pnseclvl9\\pnlcrm\\pnstart1\\pnindent720\\pnhang{\\pntxtb (}{\\pntxta )}}\\pard\\plain \\qc\\widctlpar\\adjustright \\fs20\\lang1036\\cgrid {\\fs36 Ceci est un exemple qui affiche la variable \\ldblquote \\~variable\\~\\rdblquote \\~:
\\par
\\par }{\\fs36\\cf6 $variable
\\par }}");
//on ferme le fichier
fclose($fichier);
//on l'envoie au client
header('Content-type: application/rtf');
header("Content-Disposition: attachment; filename=\"$nom_fichier\"");
readfile("$nom_fichier");
?>
Voilà un exemple qui devrait t'afficher une petite page qui inscrit en rouge ce que tu mets dans la variable $variable. je ne l'ai pas essayé, mais logiquement ça devrait marcher. Je crois que je ne peux pas être plus précis.
Johan_et_P irlouit> +1
J'ai eu à faire ce genre de chose autrefois.
Pour créer du RTF le plus simplement possible, j'ai employé WORDPAD. Le RTF généré est si simple que c'en devient facile à comprendre.
Petit exercice :
1°) Créer deux fichiers RTF très simples avec WORDPAD.
2°) Ouvrir l'un avec WINWORD, et enregistrer.
3°) Regarder l'un et l'autre avec NOTEPAD.
4°) Comprendre le fichier WORDPAD.
5°) Attraper mal au crâne en lisant le fichier WINWORD.
Après cet exercice, tu auras à coeur de faire des fichiers RTF les plus simples possibles, d'autant que tes utilisateurs peuvent a priori utiliser le programme de leur choix pour ouvrir et remplir ton fichier.
J'ai eu à faire ce genre de chose autrefois.
Pour créer du RTF le plus simplement possible, j'ai employé WORDPAD. Le RTF généré est si simple que c'en devient facile à comprendre.
Petit exercice :
1°) Créer deux fichiers RTF très simples avec WORDPAD.
2°) Ouvrir l'un avec WINWORD, et enregistrer.
3°) Regarder l'un et l'autre avec NOTEPAD.
4°) Comprendre le fichier WORDPAD.
5°) Attraper mal au crâne en lisant le fichier WINWORD.
Après cet exercice, tu auras à coeur de faire des fichiers RTF les plus simples possibles, d'autant que tes utilisateurs peuvent a priori utiliser le programme de leur choix pour ouvrir et remplir ton fichier.
bonjour
j'ai utilisé votre méthode de génération (génération et modification d'un fichier .rtf) mais j'ai un petit souci:
dans mon appli, j'ai une première page php dans laquelle l'utilisateur rentre un numéro d'analyse pour laquelle il voudrait créer un rapport. l'appli va chercher dans la table si l'analyse existe ou pas, jusqu'ici tout va bien.
le problème est que lorsqu’il trouve l'analyse il m'envoi un message de demande d'ouverture, ou d'enregistrement du fichier généré et ce message apparait 2 fois ( si on clique sur open on le message qui réapparait, mais si on clique sur save pas de problème).
ma question est la suivante : est-il possible d'enregistrer automatiquement le fichier généré sans que l'utilisateur n'ait besoin d'intervenir?
sinon comment faire en sorte que le fichier s'ouvre au premier clic de l'utilisateur?
sinon la méthode marche nickel, j'ai même réussi à piger certain truc du code rtf
merci d'avance
j'ai utilisé votre méthode de génération (génération et modification d'un fichier .rtf) mais j'ai un petit souci:
dans mon appli, j'ai une première page php dans laquelle l'utilisateur rentre un numéro d'analyse pour laquelle il voudrait créer un rapport. l'appli va chercher dans la table si l'analyse existe ou pas, jusqu'ici tout va bien.
le problème est que lorsqu’il trouve l'analyse il m'envoi un message de demande d'ouverture, ou d'enregistrement du fichier généré et ce message apparait 2 fois ( si on clique sur open on le message qui réapparait, mais si on clique sur save pas de problème).
ma question est la suivante : est-il possible d'enregistrer automatiquement le fichier généré sans que l'utilisateur n'ait besoin d'intervenir?
sinon comment faire en sorte que le fichier s'ouvre au premier clic de l'utilisateur?
sinon la méthode marche nickel, j'ai même réussi à piger certain truc du code rtf
merci d'avance
bonjour,
j'utilise également les headers pour permettre l'affichage ou l'enregistrement d'un document
généré par un formulaire hteumleumleu et php.
J'ai une page html, contenant le formulaire qui renvoit sur un script php qui complète un
document rtf pour afficher/enregistrer un nouveau document, cette fois en .doc.
Mon souci :
Si je clique sur ouvrir : word s'ouvre, avec un fichier format .doc. Si je veux enregistrer sous à ce moment là,
le format est en rtf par défaut.
Mon "clients" sont un peu déb..s et ils ne savent pas qu'on peut changer le format d'un document
dans la fenêtre "enregister sous".
Je voudrais donc leur faciliter la tâche et qu'ils n'aient plus qu'à changer le
nom du fichier (ce sera déjà beaucoup pour certains).
Par contre si je clique sur enregistrer lorsque le document est généré avant de l'afficher, alors là pani problème, j'obtiens le résultat
attendu.
Et si je change le format du document modèle en .doc, mon script ne fonctionne plus.
Cela inspire t il quelqu'un ou pourriez vous m'orienter ?
Merci d'avance !
j'utilise également les headers pour permettre l'affichage ou l'enregistrement d'un document
généré par un formulaire hteumleumleu et php.
J'ai une page html, contenant le formulaire qui renvoit sur un script php qui complète un
document rtf pour afficher/enregistrer un nouveau document, cette fois en .doc.
Mon souci :
Si je clique sur ouvrir : word s'ouvre, avec un fichier format .doc. Si je veux enregistrer sous à ce moment là,
le format est en rtf par défaut.
Mon "clients" sont un peu déb..s et ils ne savent pas qu'on peut changer le format d'un document
dans la fenêtre "enregister sous".
Je voudrais donc leur faciliter la tâche et qu'ils n'aient plus qu'à changer le
nom du fichier (ce sera déjà beaucoup pour certains).
Par contre si je clique sur enregistrer lorsque le document est généré avant de l'afficher, alors là pani problème, j'obtiens le résultat
attendu.
Et si je change le format du document modèle en .doc, mon script ne fonctionne plus.
Cela inspire t il quelqu'un ou pourriez vous m'orienter ?
Merci d'avance !
Citation :
rien compris ...Merci pour ton intervention.
C'est vrai que le problème n'est pas évident au premier abord. Donc je te la refais !
Ce que je veux faire : que mon script php génère un fichier .doc
Ce que mon script fait actuellement :
- lorsque le document est créé, un menu contextuel apparait : ouvrir ou enregistrer (tu me suis ?)
- si je clique sur enregistrer : une fenêtre windows apparaît, m'indique un titre (contenu dans mes headers php) et un format .doc
(lui aussi contenu dans mes headers). (Tu me suis toujours ?)
Là où j'ai un problème : c'est quand je clique sur ouvrir :
- le fichier s'ouvre bien dans word;
- mais si je fais un "enregistrer sous", le format du fichier est en .rtf ;
Donc je me demande comment je peux faire pour que mon fichier texte soit toujours au format .doc ???
Autrement dit que faire pour que mon fichier texte soit toujours un .doc par défaut dans les menus d'enregistrement ???
Merci
A mon avis, ce que génère php est un .rtf que tu renommes artificiellement en .doc avec les headers...
Quand tu l'ouvres directement avec Word, ce dernier lit les infos contenus dans le fichier et repère que c'est un .rtf... Donc il l'enregistre ensuite par défaut en .rtf.
Il va falloir que tu génères du "vrai" .doc avec ton script, mais je ne sais pas si c'est possible (format fermé, toussa...)
Quand tu l'ouvres directement avec Word, ce dernier lit les infos contenus dans le fichier et repère que c'est un .rtf... Donc il l'enregistre ensuite par défaut en .rtf.
Il va falloir que tu génères du "vrai" .doc avec ton script, mais je ne sais pas si c'est possible (format fermé, toussa...)
merci marsien,
j'avais l'impression que ce n'était pas évident.
je vais voir si le xml peut m'être utile.
en tout cas, lorsque j'utilise un fichier .doc comme "modèle à remplir dynamiquement", j'obtiens une erreur.
mais j'ai l'impression que le format .doc étant propriétaire, ça va être difficile vu mon niveau.
Merci encore.
j'avais l'impression que ce n'était pas évident.
je vais voir si le xml peut m'être utile.
en tout cas, lorsque j'utilise un fichier .doc comme "modèle à remplir dynamiquement", j'obtiens une erreur.
mais j'ai l'impression que le format .doc étant propriétaire, ça va être difficile vu mon niveau.
Merci encore.
Generer un .docx (format XML utilisé par office 2007) serait certainement plus facile mais imposes aux users d'avoir soit office 2007, soit 2003/XP 2000 (mais PAS office 97) + le plug in pour lire le format en question (dispo gratuitement chez microsoft).
Par contre GROS avantage pour les coders, le format est fortement documenté, et c'est un container (zippé) avec des fichiers XML assez "facile" (a comparer à avant) à générer dedans.
Par contre GROS avantage pour les coders, le format est fortement documenté, et c'est un container (zippé) avec des fichiers XML assez "facile" (a comparer à avant) à générer dedans.
bonjour
j'ai grâce au message de cette partie pu générer un automatiquement un fichier rtf qui represente un la page de garde d'un rapport que les utilisateurs peuvent compléter à leur guise. et jusque là tout marche bien. le problème survient lorsqu'on essaye de rajouter des images dans le fichier généré, la taille de ce dernier augmente et passe à 50 mega
pourtant lors de la génération, lorsqu'il n'y a que du texte le fichier a une taille normale
est-ce que quelqu'un a déjà rencontré ce pb?
j'ai grâce au message de cette partie pu générer un automatiquement un fichier rtf qui represente un la page de garde d'un rapport que les utilisateurs peuvent compléter à leur guise. et jusque là tout marche bien. le problème survient lorsqu'on essaye de rajouter des images dans le fichier généré, la taille de ce dernier augmente et passe à 50 mega
pourtant lors de la génération, lorsqu'il n'y a que du texte le fichier a une taille normale
est-ce que quelqu'un a déjà rencontré ce pb?
en faite la taille des images varie , mais j'ai trouver une solution:
apparemment le problème vient de l'insertion des image dans un fichier rtf, lors de l'enregistrement des modifications apportées au fichier généré, si on fait un save as et on enregistre en .doc, le fichier garde une petite taille (quelque soit la taille des images) .donc pour l'instant je ferai comme ça à moins que quelqu'un ait une autre solution
apparemment le problème vient de l'insertion des image dans un fichier rtf, lors de l'enregistrement des modifications apportées au fichier généré, si on fait un save as et on enregistre en .doc, le fichier garde une petite taille (quelque soit la taille des images) .donc pour l'instant je ferai comme ça à moins que quelqu'un ait une autre solution
Bah si tu as ecris la classe toi même, on va avoir du mal à tester
Enfin niveau piste:
* vu que tu génère le document toi même tu peux indiquer le n° de page dans une arborescence (array à 3 entrée -> "intitulé" / "profondeur" / "page") créée au fur et a mesure de la génération.
* plus qu'a creer une (des) page(s) de sommaire.
Enfin niveau piste:
* vu que tu génère le document toi même tu peux indiquer le n° de page dans une arborescence (array à 3 entrée -> "intitulé" / "profondeur" / "page") créée au fur et a mesure de la génération.
* plus qu'a creer une (des) page(s) de sommaire.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumFormatage texte php
- ForumChamp texte php
- ForumFormatage d'un texte en php
- ForumMise en forme php
- ForumMise en forme textarea php
- ForumMise en forme du texte en css
- ForumMise en forme formulaire php
- ForumGénérer doc en php
- ForumInfos sur mise en forme php
- ForumConserver formatage texte php
- Voir plus
..... Exemple : la ligne 19 de ton code :