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.