PDF cover thumbnails for attached files

This howto has been superseded by http://drupal.org/node/815816 (patch for Upload preview module).
Tested on:

  • Drupal 5.x
  • Content Templates module
  • ImageMagick 6.3.7
  • GhostScript 8.15.3

Using ImageMagick + GhostScript you can convert the first page of a PDF into a thumbnail image linking to file. You can cut and paste this function on your theme main script: you have to manually create the thumb directory and grant write permission by scripts. Check also the path to ImageMagick convert command.

function pdf_thumb_attachments(){
 $allowed_mime = array("application/pdf");
	foreach($files as $file){
	if(in_array(strtolower($file->filemime),$allowed_mime) && strstr(strtolower($file->description),"classifica")){
		$title = $file->description;
			# create link title from file name (Transliteration module suggested)
			$title = str_replace("_"," ",substr($title,0,strlen($title)-4));
		$img = "";
		$local_src_path = getcwd() . "/" . $file->filepath;
		$destfilename = substr($file->filename,0,strlen($file->filename)-4) . ".gif";
		# YOUR-FILES-DIRECTORY/pdfgen will hosts the generated thumbnails
		$local_dest_path = getcwd() . "/" . file_directory_path() . "/pdfgen/" . $destfilename;
		$imageurl = base_path() . file_directory_path() . "/pdfgen/" . $destfilename;
		/* create thumbnail on node reading if file doesn't exist */
			# choose the first page of the PDF, scale to 90x90px and convert to GIF
			$exec = '/usr/bin/convert -scale 90x90 "'.$local_src_path.'"[0] "'.$local_dest_path . '"';
			/* delete this line if you cannot read the generated file
			$exec = "chmod 777 ".$local_src_path;
		$img = '<img src="'.$imageurl.'" alt="'.$title.'" />';
		$output .= "<li>". l($img." ".$title,$file->filepath, $attributes = array("title"=>$title), $query = NULL, $fragment = NULL, $absolute = TRUE, $html = TRUE) . "</li>";
	$output = '<div class="my-attachments"><ul>' . $output . "</ul></div>";
 return $output;


You can alternatively use imagemagick function provided by image.module (the image.imagemagick.inc file on drupal/includes):

function file_preview_path($filename, $filepath = 'filepreview') {
  /** generate jpg thumbnails **/
  return $filepath . "/" . substr($filename,0,strlen($filename)-4) . ".jpg";

 function file_preview(&$file, $pages = Array(1)) {
   $allowed_mime = array("application/pdf");
	$local_src_path = getcwd() . "/" . $file->filepath;
	$local_dest_path = getcwd() . "/" . file_directory_path() . "/" . file_preview_path($file->filename);
	# create thumbnail only when needed
	$imagemagick = getcwd() . '/includes/' . 'image.imagemagick.inc';
	if(!file_exists($local_dest_path) && file_exists($imagemagick)){
                                                       $local_dest_path, array('-colorspace RGB'));
		# all can read thumbnail files
			chmod($local_dest_path, 0777);
	return file_preview_path($file->filename);
	return FALSE;

6 thoughts on “PDF cover thumbnails for attached files

  1. Ricambio la visita.
    Bello il tuo blog tecnico, addirittura in inglese (sicuramente il mio non raggiungerà il livello del tuo, però magari prenderò spunto per qualche post).

  2. Temo che il mio sia un’inglese un po’ maccheronico, ma ti ringrazio per la comprensione e per la visita. 🙂 Questo spazio lo uso proprio come intendevo consigliarti di usare il tuo, come backup della memoria a breve termine. Meglio dei fogliettini che lasciavo in giro per casa prima, comunque. 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.