IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Générer du .DOC sans passer par les objets COM [Trucs & Astuces]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [POO] Générer du .DOC sans passer par les objets COM
    Bonjour,

    mon problème est le suivant : je cherche à générer des documents word... La solution des objets COM ne convient pas au niveau des ressources du serveur si trop de fichiers générés en même temps.
    Peut-on générer du word sans passer par ces objets COM, qui restent pour l'instant la seule solution que j'ai trouvé. Existe-t-il un objet COM pour WordPad qui génére des rtf ??

    Grand merci d'avance!

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    word peut te généré du rtf,
    sinon il faut que tu sache encodé ton texte en format word. Ce qui est plus que tendu

  3. #3
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Points : 655
    Points
    655
    Par défaut
    comme on sait pas bien comment est créé un fichier word (microsoft n'a pas vraiment donné les sources )
    le mieux est de générer du RTF, ça s'ouvre très bien dans word et ailleurs aussi !
    Membre éclairé, lol !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    ok, merci pour vos réponses...

    Tu as l'air de savoir comment générer du rtf, peux-tu m'en dire plus la dessus stp ?

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    essaye de voir le site :
    site

  6. #6
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut
    Regarde ce lien: MSDN

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup!!

  8. #8
    Membre habitué Avatar de semaj_james
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 193
    Points : 139
    Points
    139
    Par défaut
    Si çà te conviens n'oublie pas de mettre le tag [resolu]

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    ça me convient mais quelqu'un m'a filé une solution interessante....
    La voila...

    header("Content-Type: application/msword; name=Fichier.doc");
    header("Content-disposition: attachment; filename=Fichier.doc");
    echo "#\n";
    echo "# Support papier d'un controle interne\n";
    echo "# \n";


    ça a l'air de marcher, toutefois, les balises html ne sont pas prises en compte... Je m'adresse donc à ceux qui utilisent cette technique et leur demande si l'on peut utiliser les balises html pour la mise en forme..

    merci d'avance

  10. #10
    Membre habitué Avatar de dor_boucle
    Inscrit en
    Juin 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 147
    Points : 136
    Points
    136
    Par défaut
    arf désolée on n'a pas cherché pour toi aussi, donc non...
    je peux juste t'aider sur de la génération de fichiers exel, mais word... meme en rtf mon .chm de php ne trouve pas de solution.
    bon ap !!
    J'ai l'impression d'engager un combat sans précédent avec la nature. Je vais bien, le moral est bon, je poursuis le vol. (Youri Gagarine)

  11. #11
    PoY
    PoY est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    2 solutions me viennent à l'esprit :

    1) comme beaucoup : le rtf est la première solution.

    Quand j'ai eu besoin de créer des docs en php, je me suis penché sur le rtf car ce format est lisible aussi bien sur PC que sur MAC. J'ai procédé de la façon suivante :
    J'ai créer un modèle avec word (enregistrer sous ... rtf) avec des balises [MABALISE] (avec un nom différents à chaque fois) aux endroits où je voulais insérer des valeurs de variables. Ensuite j'ai ouvert mon rtf avec le bloc notes, et j'ai remplacé mes balises par les variables php. Ensuite il ne reste plus qu'a créer le fichier PHP a peu près comme ca :

    $fichier_ouvert = fopen($nom_fichier, "a+w");
    fputs($fichier_ouvert, "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff36\\deff36\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1036\\deflangfe1036{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Skia};}{\\f1\\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n");
    ....
    fputs($fichier_ouvert, "\\clbrdrt\\brdrnone \\clbrdrl\\brdrnone \\clbrdrb\\brdrnone \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth7842\\clshdrawnil \\cellx9945\\row }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\faauto\\adjustright\\rin0\\lin0\\itap0 {\\rtlch \\af36 \\ltrch \\insrsid16002355 \n");
    fputs($fichier_ouvert, "\\par }}\n");
    fclose($fichier_ouvert);

    pour inclure les variables il ne faut pas oublier de l'encadrer comme ceci ".$ma_variable." lorsqu'elle se trouve dans un fputs

    2) 2eme solution mais je ne sais pas si elle convient (car ne fonctionne que sous Windows il me semble) serait de créer ton document en créant un document .html que tu renommes en .doc
    Word PC le lit très bien, mais les autres plates-formes j'ai des doutes (surtout MAC car j'ai essayé )

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je te remercie pour ta solution Poy, je vais l'essayer.....

    Simplement, si ça ne te dérange pas je te recontacterais en cas de problème..

    Merci encore!

  13. #13
    PoY
    PoY est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    OK pas de problème, ca me dérange pas

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    j'utilise une autre méthode, assez proche :
    J'ai un template en .rtf (crée sous word et enregistré en .rtf).

    Dans ce template, j'ai inséré des tags qui correspondent aus endroits ou je veux insérer des variables : Ex, tag #mavariable1#, #mavraible2#, etc...
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    	// On ouvre le template vierge
    	$filename = 'Dossier_templ.rtf';
    	$fp = fopen ( $filename, 'r' );
     
    	// On le place en variable $output et on le ferme
    	$output = fread( $fp, filesize( $filename ) );
    	fclose ( $fp );
     
    	// on ressort le fichier .rtf à insérer dans le temlate
    	$dossier='juristes/fichiers/'.$id_question.'_dos.rtf';
     
    	// si on le trouve, on le lit dans une variable
    	if (file_exists("$dossier")==TRUE)
    	{
    	$fp = fopen ( $dossier, 'r' );
    	$fich_dos = fread( $fp, filesize( $dossier ) );
    	}
     
                   // On insère la variable
    	$output = str_replace( '#mavariable1#', "$dossier", $output );
    ici, j'ai inséré du rtf dans du rtf, mais on peut le faire avec du fichier texte. Il prendra le format donné dans le template au tag #xxx#.

    Je ne sais pas si c'est une bonne méthode, je suis pas informaticien, mais elle marche ... à peu prèt ! c'est a dire que ça marche, mais, je ne sais pas pourquoi (je vais poster sur ce problème), les caractères "è, à, ê" sont remplacés par "č, ą, ź".

    Bye

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je viens d'essayer ce bout de programme :
    fichier_ouvert = fopen($nom_fichier, "a+w");
    fputs($fichier_ouvert, "{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1\\adeff36\\deff36\\stshfdbch0\\stshfloch0\\stshfhich0\\stshfbi0\\deflang1036\\deflangfe1036{\\fonttbl{\\f0\\froman\\fcharset0\\fprq2{\\*\\panose 02020603050405020304}Times New Roman{\\*\\falt Skia};}{\\f1\\fswiss\\fcharset0\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n");
    ....
    fputs($fichier_ouvert, "\\clbrdrt\\brdrnone \\clbrdrl\\brdrnone \\clbrdrb\\brdrnone \\clbrdrr\\brdrnone \\cltxlrtb\\clftsWidth3\\clwWidth7842\\clshdrawnil \\cellx9945\\row }\\pard \\ltrpar\\ql \\li0\\ri0\\widctlpar\\faauto\\adjustright\\rin0\\lin0\\itap0 {\\rtlch \\af36 \\ltrch \\insrsid16002355 \n");
    fputs($fichier_ouvert, "\\par }}\n");
    fclose($fichier_ouvert);
    de la même façon que tu l'as expliqué : à savoir j'ai créé un document .rtf que j'ai ouvert ensuite avec le bloc note. J'ai récupéré le code affiché et l'ai mis dans le programme que tu proposes, tout en remplaçant les \ par des \\
    Cependant le document s'ouvre mais aucun texte n'apparait.... et quand j'ouvre le document manuellement, j'ai le code rtf qui apparaît. Please help

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Je ne maitrise pas la syntaxe RTF, donc je ne sais pas si ce que tu ecris dans ton fichier $fichier_ouvert est correct.

    Mais il me semble (c'est même sur !) qu'il manque le $ devant fichier_ouvert au début de ton script.

    D'autre part, tu ouvres $nom_fichier, mais tu ne le lis pas (fread). je ne suis pas sur, du coup, que tu puisse ecrire dedans.

    Et comment renvois tu à l'ecran ?

  17. #17
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Points : 11
    Points
    11
    Par défaut
    Salut Dredd & les autres,

    Je suis en pleine prise de tete sur la maniere de generer des fichiers rtf a partir de code php. La solution d'insérer dans le code php l'ensemble du "code" rtf ne me convient pas car mon fichier rtf contient plusieurs dizaines de pages.
    La solution que tu proposes est apparement de créer un template rtf modele avec des balises #mabalise# qu'on va copier dans un template vide (a creer donc je presume) et dans lequel on va remplacer les balises par nos valeurs.

    Dans l'exemple que tu proposes je n'arrive pas à comprendre quel fichier rtf fait quoi. Peux tu m'apporter quelques précisions sur la méthode?

    De plus, aurais tu un moyen derriere d'afficher le fichier rtf créé, pour que l'utilisateurs puisse le modifier puis l'enregistrer en local sur son poste.


    Merci beaucoup,

    Mat.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/09/2007, 11h44
  2. [PHP-JS] Redirection sans passer par les headers
    Par ozzmax dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2007, 15h38
  3. Réponses: 5
    Dernier message: 08/09/2006, 12h12
  4. Réponses: 10
    Dernier message: 24/02/2004, 12h28
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo