2011-03-29 4 views
1

J'essaie d'utiliser les en-têtes et Imagick pour afficher les fichiers PDF sous forme d'image. Je l'ai fonctionné dans d'autres navigateurs sauf dans Safari l'image vient avec un fond noir. Un exemple est ici et le code généré est l'exemple ci-dessous:PHP Safari PDF à l'image Problème

http://www.iptlock.com/pdf_test.php

<?php 
header("Pragma: no-cache"); 
header("Expires: -1"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

$file_location='/media/files/bFdIdcxsOKtkBjzayEBD.pdf'; 

$im = new imagick($file_location."[0]"); 
$im->setImageFormat("jpg"); 
header("Content-Type: image/jpeg"); 
echo $im; 
?> 

Je ne suis pas sûr ce qui est faux ou comment corriger le problème.

+0

Eh bien, il semble que le changer en PNG résout le problème, mais cela ne répond toujours pas pourquoi les fichiers JPEG ne fonctionnent pas. –

+0

Fonctionne agréablement sur Safari 5.0.3 pour mac :-) – Ragnar123

Répondre

0

Cela me vient à l'esprit lorsque je crée des miniatures de PDF à JPG/JPEG.

C'est la fonction que je l'ai mis en œuvre pour le faire:

function writeAttachmentsToDisk($mbox,$uid,$part,$dir,$subtype,$subject,$attachments,$readonly=false,$dataInici=''){ 
    if(!file_exists($dir)){ 
    mkdir($dir); 
    } 
    if(!empty($dataInici)){ 
    $subject = trim(str_replace($dataInici,'',$subject)); 
    } 
    $filename = setNomArxiu(@iconv_mime_decode($subject,0,'UTF-8').(count($attachments)>0?'-'.strtoupper(alpha(count($attachments))):'')).'.'.$subtype; 
    if(!$readonly || !file_exists($dir.'/'.$filename)){ 
     $temp_filename = 'tmp.eml'; 
     $email_file = $dir."/".$temp_filename; 
     @imap_savebody($mbox,$email_file,$uid,$part,FT_UID | FT_PEEK); 
     if(file_exists($email_file)){ 
      $tb = false; 
      for($a=0;$a<count($attachments);$a++){ 
      if(files_identical($email_file,$attachments[$a])){ 
       $tb = true; 
       break; 
      } 
      } 
      if(!$tb){ 
       $command = "php -r '\$fh = fopen(\$argv[1], \"r\"); \$theData=fread(\$fh, filesize(\$argv[1])); fclose(\$fh); echo base64_decode(\$theData);' '$email_file' > $dir/$filename"; 
       exec($command,$output,$result); 
       if($result!=0){ 
       unlink($email_file); 
       @rmdir($dir); 
       return false; 
       } else { 
       unlink($email_file); 
       return $dir.'/'.$filename; 
       } 
      }else{ 
      unlink($email_file); 
      @rmdir($dir); 
      return false; 
      } 
     }else{ 
     unlink($email_file); 
     @rmdir($dir); 
     return false; 
     } 
    }else{ 
    return $dir.'/'.$filename; 
    } 
} 

La fonction ci-dessus utilise d'autres fonctions qui ne sont pas pertinents à la question à portée de main (alpha, setNomArxiu, files_identical).

Je suppose que le problème doit être en quelque sorte ici:

$command = "php -r '\$fh = fopen(\$argv[1], \"r\"); \$theData=fread(\$fh, filesize(\$argv[1])); fclose(\$fh); echo base64_decode(\$theData);' '$email_file' > $dir/$filename"; 
exec($command,$output,$result); 

L'image résultante can be seen here in most browsers mais apparaît sombre, presque noir, dans Safari et lors de l'enregistrement sous Mac.

Des idées sur ce qui se passe ici?

Merci!

+0

Est-ce que quelqu'un sait si ce problème a quelque chose à voir avec Safari? J'apprécierai vos commentaires. – Gerard