Exporter fichier .rtf en php et ouverture avec libreoffice writer

Exporter fichier .rtf en php et ouverture avec libreoffice writer - PHP - Programmation

Marsh Posté le 29-09-2020 à 10:09:25    

Bonjour,
 
Je cherche à faire du publipostage en PHP sans télécharger de library supplémentaire type PHPWord.
Du coup je passe par du .rtf.
Dans libreoffice, j'enregistre mon fichier modèle, qui était en odt à la base, en rtf.
 
J'arrive ensuite à obtenir un fichier qui me convient avec le code suivant :
 

Code :
  1. $envoi_reception = file_get_contents('lefichier.rtf');
  2. $envoi_reception = str_replace('#type','TITI',$envoi_reception);
  3. $monfichier = fopen('creation.txt', 'w+');
  4. fputs($monfichier, $envoi_reception);
  5. fclose($monfichier);
  6. rename("creation.txt", "courrier_contact.rtf" );


 
 
Le fichier courrier_contact.rtf se crée dans mon projet sous Eclipse. Et quand je clique dessus dans mon projet il s'ouvre nickel avec libreoffice. Et #type a bien été remplacé par TITI.
 
Maintenant, je voudrais offrir à l'utilisateur la possibilité de télécharger le fichier et l'ouvrir avec libreoffice pour le modifier.
Donc j'ai rajouté le code suivant :
 

Code :
  1. header('Content-Type: application/rtf');
  2. header('Content-Disposition: attachment; filename="courrier_contact.rtf";');
  3. readfile("courrier_contact.rtf" );


 
 
Et là quand j'ouvre le fichier je n'obtiens pas du tout le même résultat que précédemment. J'obtiens un truc dans ce style:
 
{\rtf1\ansi\deff3\adeflang1025 {\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset0 Calibri;}
 
 
Pourriez-vous m'aider svp ?

Reply

Marsh Posté le 29-09-2020 à 10:09:25   

Reply

Marsh Posté le 29-09-2020 à 10:20:24    

Il t'ouvre le fichier en mode texte j'ai l'impression. T'es sûr que c'est le bon content-type ?
Question bête : pourquoi tu passes par la création d'un fichier txt intermédiaire ? Pourquoi tu ne fais pas le find/replace directement dans le rtf et tu sauvegardes le résultat dans un nouveau fichier rtf :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-09-2020 à 15:18:26    

A vrai dire j'ai copié du code sur internet. Le gars passait par un fichier txt alors je me suis pas trop posé de question. D'autant que le résultat était bon. J'ai essayé d'enlever le passage par le .txt comme tu suggères et ça fonctionne aussi. Mais ca ne résout pas mon problème au moment de l'export.
Concernant le content type, j'en ai essayé plusieurs: rtf, msword et vnd.oasis.opendocument.text. A chaque fois le résultat est le même au moment de l'export.

Reply

Marsh Posté le 29-09-2020 à 17:50:44    

Oui, effectivement, ça pourrait expliquer pourquoi le navigateur ne considère pas le fichier comme un rtf "normal" mais affiche son contenu brut.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 30-09-2020 à 08:14:42    


 
Voici le contenu complet de mon fichier php :
 

Code :
  1. <?php
  2. $envoi_reception = file_get_contents('non respect + lettre option.rtf');
  3. $envoi_reception = str_replace('#type','TITI',$envoi_reception);
  4. $monfichier = fopen('courrier_contact.rtf', 'w+');
  5. fputs($monfichier, $envoi_reception);
  6. fclose($monfichier);
  7. header('Content-Type: application/rtf');
  8. header('Content-Disposition: attachment; filename="courrier_contact.rtf";');
  9. readfile('courrier_contact.rtf');
  10. ?>


 
Comme tu vois il n'y a aucun espace ni ligne vide.
J'ai essayé de rajouter manuellement un '<' au debut du fichier mais ça ne change rien.

Reply

Marsh Posté le 30-09-2020 à 09:50:44    

J'avais essayé octetstream aussi mais ça ne fonctionnait pas non plus.  
Finalement j'ai réussi à obtenir ce que je voulais avec un code plus simple et je récupère directement en .odt.
Voici le code pour ceux que ça intéresse :
 

Code :
  1. <?php
  2. $fichier_edit = file_get_contents('non respect + lettre option.rtf');
  3. $fichier_edit = str_replace('#type','TITI',$fichier_edit);
  4. header('Content-Type: application/rtf');
  5. header('Content-Disposition: attachment; filename="courrier_edite.odt";');
  6. echo $fichier_edit;
  7. ?>


 
Merci pour votre aide en tout cas. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed