2012-06-22 5 views
1

Je souhaite convertir un fichier PDF délogé en image via PHP. Pour ce faire, j'utilise l'extension Imagemagick pour PHP. Le problème est que si je télécharge le fichier pdf via la fonction file_get_contents, je ne peux pas créer un objet Imagemagic avec ce contenu téléchargé. Voici le code:Conversion d'un fichier PDF en image avec ImageMagick

<?php 

$url = "pdf webaddress"; 
$pdfData = file_get_contents($url); 

try 
    { 

     $img = new Imagick($pdfData); 
     $img->setResolution(480,640); 
     $img->setImageFormat("jpeg"); 
     $img->writeImage("test.jpeg"); 

    } 
catch(Exception $e) 
{ 
    echo $e->getMessage(); 
} 
?> 

Je reçois l'erreur suivante:

Unable to read the file: %PDF-1.6 %גדֿ׃ 7 0 obj <> endobj 86 0 obj <>/Filter/FlateDecode/ID[]/Index[7 146]/Info 6 0 R/Length 257/Prev 592751/Root 8 0 R/Size 153/Type/XRef/W[1 3 1]>>stream h�bbd `b ׁ‘6 ’9DעƒH

Maintenant, si je l'ai lu dans le fichier pdf stocké localement, tout fonctionne très bien. Le code est:

$image = "output.png"; 
$img = new Imagick("path to pdf file"); 
$img->setResolution(480,640); 
$img->setImageFormat("jpeg"); 
$img->writeImage("test.jpeg"); 

Toute suggestion, aide est appréciée.

+2

Vous devez le lire localement avec le chemin d'accès au fichier pdf. PHP s'exécute sur le serveur, crée un dossier pour le pdf et l'utilise pour Imagick. – Ryan

Répondre

2

De l'ImageMagick PHP extension documentation page, le constructeur Imagick a besoin d'un nom de fichier paramètres qui peuvent être soit un fichier local ou une URL. :

Paths can include wildcards for file names, or can be URLs.

Vous devez passer l'URL directement, sans file_get_contents, les flux de fichiers PHP sont assez puissants.

Une autre solution pour vous serait de stocker le fichier localement (voir tempnam() et file_put_contents), mais si vous ne l'utilisez pas pour autre chose que la conversion à une image, il est assez inutile:

$pdfUrl = "..."; 
$tmpFileName = tempnam(sys_get_temp_dir(), "pdf"); 
file_put_contents($tmpFileName, file_get_contents($pdfUrl)); 
// Do your ImageMagick job 
unlink($tmpFileName); 
+0

Merci, cette solution fonctionne.Vous avez sauvé ma journée. Marquer la réponse comme acceptée. – user1107888

Questions connexes