Un futur module : création d'aperçus des fichiers PDF attachés à la volée
Par Julien, le lun, 13/10/2008 - 19:20
Un bout de code qui deviendra prochainement un module : la création d'aperçus des fichiers PDF attachés à la volée. L'idée est que lorsqu'on utilise un module d'image qui associe une (ou plusieurs) image à un node, une image de ce type soit générée automatiquement à partir des fichiers PDF attachés au node.
Il nous faut donc :
- Que les fichiers attachés soient activés pour au moins un type de contenu
- Qu'un module d'image soit activé. Pour l'instant, seul le module Image attach fonctionne, mais le module sera compatible avec CCK.
- Disposer d'un serveur dédié, seul à même de nous permettre l'utilisation de Ghostscript, qui nous permettra de générer une image à partir d'un fichier PDF. Cela marche aussi avec les fichiers EPS.
function hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'insert':
case 'update':
if ($node->files) {
$files = $node->files;
foreach ($files as $f) {
$f = (object)$f;
if ($f->filemime == "application/pdf") {
$file = $f;
break;
}
}
$file = $_SERVER['DOCUMENT_ROOT'].'/'.$file->filepath; // the original file
$path = substr($file, 0, strrpos($file,'/'));
$filename = substr($file, strrpos($file,'/')+1);
$filename = substr($filename, 0, strrpos($filename,'.')).'.jpg';
$file2 = file_create_filename($filename, $path);
$esc_file = str_replace(' ', '\ ', $file); // escape for gs command
$esc_file2 = str_replace(' ', '\ ', $file2);
$result1 = @exec("gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=$esc_file2 $esc_file 2>&1");
@chmod($file2, 0664);
if (isset($node->iid)) node_delete($node->iid); // delete old thumb
$image = image_create_node_from($file2, t('Image').' '.$node->title, ''); // create image node
$node->iid = $image->nid; // save image_node attachment
if (isset($node->iid)) {
db_query("DELETE FROM {image_attach} WHERE nid=%d", $node->nid);
if ($node->iid > 0) {
db_query("INSERT INTO {image_attach} (nid, iid) VALUES (%d, %d)", $node->nid, $node->iid);
}
}
watchdog('File thumbnail', l('node/'.$node->iid, 'node/'.$node->iid));
}
break;
}
}
Avec ce hook, lorsqu'on enregistre un node, un node image est créé et attaché au node à partir du fichier PDF attaché !
Après un peu de travail, nous mettrons à disposition ce module, bien entendu ! 