Das OpenDocument Dateiformat
OpenDocument Dateien bestehen aus gezippten XML Dateien. Dadurch kann man sie sehr einfach bearbeiten, es reicht bereits ein simpler Texteditor. Die Einfachheit der Formate erlaubt es auch Programmiersprachen wie PHP Daten aus OpenDocument Dateien zu extrahieren oder zu bearbeiten.
Eine weitere Besonderheit des OpenDocument Formats: Jede Datei enthält ein Screenshot seines Inhaltes. Dieses PNG Bild befindet sich immer in OPENDOCDATEI/Thumbnails/thumbnail.png. Um dieses Screenshot anzuzeigen, muss man also lediglich eine OpenDoc Datei entzippen und das Bild aus dem vorgegebenen Pfad extrahieren.
Screenshot auslesen
Wie bereits geschrieben, ist es einfach ein Screenshot einer OpenDoc Datei darzustellen. Wir müssen sie lediglich entzippen. PHP stellt uns zu diesem Zweck die ZIP Funktionen zur Verfügung. Diese Funktionen sind kein Standard-Bestandteil von PHP sondern müssen zusätzlich installiert werden. Sind sie nicht installiert, funktioniert folgendes Skript nicht.
<?php
function opendoc_thumb($datei)
{
// Datei ueberpruefen
$zip_pfad = getcwd() . '/' . $datei;
if (!file_exists($datei) or !is_readable($datei) or !($zp = zip_open($zip_pfad))) {
return false;
}
// Pfad des Thumbnail in der OpenDoc Datei
$tn_pfad = 'Thumbnails/thumbnail.png';
while ($zip_inhalt = zip_read($zp)) {
if (zip_entry_name($zip_inhalt) == $tn_pfad && zip_entry_open($zp, $zip_inhalt, 'r')) {
$inhalt = zip_entry_read($zip_inhalt, zip_entry_filesize($zip_inhalt));
zip_entry_close($zip_inhalt);
break; // Schleife verlassen
}
}
zip_close($zp);
// Thumbnail oder FALSE zurueckgeben
if (isset($inhalt)) {
// der Inhalt wird als Bild ausgegeben
header('Content-Type: image/png');
header('Content-Disposition: inline');
header('Content-Description: Thumbnail einer OpenDocument Datei');
return $inhalt;
}
return false; // fuer ZIP Dateien
}
// Funktionsaufruf: Screenshot anzeigen
echo opendoc_thumb('test.odt');
?>
Als Ergebnis bekommt man ein Screenshot der gewählten OpenDocument Datei. So wie das Skript hier steht, überprüft es nicht, ob die übergebene Datei auch wirklich eine OpenDoc Datei ist. Wenn man also den Pfad einer fremden existierenden Datei übergibt, erhält man einen Fehler. Theoretisch kann die Funktion jede beliebige *.zip Datei entpacken und darin nach einem Thumbnail suchen. Wird keines gefunden, wird FALSE zurückgegeben.