insertion d'une image dans un fichier .odt

charliecollard
Invité n'ayant pas de compte PHPfrance

05 nov. 2007, 17:49

Bonjour,bcp d'entre vous bien plus fort que moi save qu'un fichier open office n'est autre qu'un ensemble de ficher xml zippé.
Pour mon site j'utilise un fichier .odt deja crée dans le quel j'ai mise des balises du type {Image2}.
J'ai ensuite crée une classe en me basant sur une deja existante dont je n'ai pas reussi a retourver l'url.ELLE N'EST DONC PAS DANS SA GROSSE PARTIE DE MOI.
<?php
	class odfDoc{
		private $file; // File name
		private $content; // File content extracted from the content.xml file
		private $vars = array(); // Array with all the data to change
        private $pictures; //the directorie contains all map
        
		function odfDoc($file) {
			$this->file = $file;
			$zip = new ZipArchive();
			if ($zip->open($this->file) === TRUE) {
				$this->content = $zip->getFromName('content.xml');
                $this->pictures= $zip->zip_entry_open();
				
                $zip->close();
			} else {
				exit("Error while Opening the file '$file' - Check your odt file\n");
			}
		}

		function SetImage($key,$image){
         //une image xml dans un fichier .odt doit etre de la forme suivante:
         //<draw:frame draw:style-name="fr2" draw:name="graphics2" text:anchor-type="as-char" svg:width="18.983cm" svg:height="26.852cm" draw:z-index="1"><draw:image xlink:href="Pictures/10000000000004D8000006DA58D31A94.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>
            
            $this->pictures=$image;
         
                
         
             if (file_exists($this->content)) {
             
                $xmlImage="<draw:frame draw:style-name="fr2" draw:name="graphics2" text:anchor-type="as-char" svg:width="18.983cm" svg:height="26.852cm" draw:z-index="1"><draw:image xlink:href="Pictures/'.$this->pictures.'" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>";
                //j'ouvre le fichier xml  (arg w+ pour la modification d'un fichier en ecriture lecture deja existant 
                $fp = fopen($this->content, 'w+'); 
                
               //il faut maintenant parser le ficheir afin de toruver le $key
               //on parcourt toutes les lignes
               while (!feof($fp)) {
                        // lecture du contenu de la ligne 
                        $Str= fgets($fp, 99000); 
                        //si la ligne presente le caractere $ key je le remplace
                        str_replace($key,$xmlImage,$Str);
               
               
               }
               //je ferme le fichier  en lui precisant le pointeur de fichier
               fclose($fp);

               }//fin du if file exists
               
              // maintenant il faut ajouter l'image dans le dossier /Pictures  qui est le dossier contenant les images dans un fichier odt
               
               
               
               
               
               
              
            
         }
        
        
        
        
        
        function setVars($key, $value) {
			$this->vars[$key] = $value;
		}


		function parse() {
			if ($this->content != NULL) {
				$this->content = str_replace(array_keys($this->vars), array_values($this->vars), $this->content);
			} else {
				exit("Nothing to parse - check that the content.xml file is correctly formed\n");
			}
		}

		function printVars() {
			echo '<pre>';
			print_r($this->vars);
			echo '</pre>';
		}

		function save($newfile) {
			if ($newfile != $this->file){
				copy($this->file, $newfile);
				$this->file = $newfile;
			}
			$zip = new ZipArchive();
			if ($zip->open($this->file, ZIPARCHIVE::CREATE) === TRUE) {
				if (!$zip->addFromString('content.xml', $this->content) AND !$zip->AddFile($this->pictures,'./Pictures/'.$this->pictures))
					exit('Error during the file saving');
				$zip->close();
			} else {
				exit('Error during the file saving');
			}
		}
	}
?>
j'ai donc creeer la fonction setimage mais celle ci ne doit pas fonctionner puisque le fichier ne presente pas d'image apres sa generation.
Quelqu'un pourrait il m'aider car je toruve le concept interessant et serviable a d'autre.En effet , la generation d'un modele open office a partir d'un modele existant reste mieux que la plupart des solutions tel que opendocuementphp ou autre.
Cordialement,charlie.