Convertir un document OpenOffice (.odt) avec PHP
Posté le Thursday 29 March 2012 | Catégories : PHP
Le format utilisé par le traitement de texte d'OpenOffice est un standard appelé OpenDocument Text, d'où provient l'extention .odt.
Ce format est en réalité une archive compressée au format ZIP qui contient plusieurs fichiers, notamment le fichier content.xml. Comme son nom l'indique, ce fichier est un simple texte xml qui décrit le contenu du document. Il est donc tout à fait possible d'utiliser PHP pour lire ce fichier et le transformer en code HTML par exemple.
PHP possède grosso modo 2 familles de fonctions pour lire un document XML:
- SimpleXML lit directement l'entièreté du fichier en mémoire, et le convertit en un objet, qui peut ensuite être utilisé ou modifié comme un objet ou un array classique. Comme il lit tout le fichier en mémoire, il n'est pas adapté aux fichiers de grande taille (plus de quelques MB);
- XMLReader, au contraire, lit le fichier progressivement, et permet au programmeur d'effectuer les opérations nécessaires successivement sur chaque noeud.
L'exemple ci-dessous utilise le wrapper ZIP ainsi que XMLReader pour afficher les titres et les paragraphes d'un document ODT:
$file = "test.odt";
$xml = new XMLReader();
$xml->open("zip://$file#content.xml", "r");
while ($xml->read()) {
if($xml->nodeType == XMLReader::END_ELEMENT) {
continue;
}
if ($xml->name == "text:h") {
// Titre 1 (heading 1) devient <h1>
// Titre 2 (heading 2) devient <h2>, etc...
$level = $xml->getAttribute("text:outline-level");
echo "<h$level>" . utf8_decode($xml->readString()) . "</h$level>";
} elseif ($xml->name == "text:p") {
echo "<p>" . utf8_decode($xml->readString()) . "</p>";
}
}