2012-06-22 4 views
1

Я хочу преобразовать файл с нисходящим PDF в изображение через PHP. Для этой цели я использую расширение Imagemagick для PHP. Проблема в том, что если я загружу файл pdf через функцию file_get_contents, я не могу создать объект Imagemagic с этим загруженным контентом. Вот код:Преобразование PDF в изображение с 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(); 
} 
?> 

Я получаю следующее сообщение об ошибке:

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

Теперь, если я прочитаю в локально сохраненном файле PDF, все работает отлично. Код:

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

Любые предложения, помощь приветствуется.

+2

Вам необходимо прочитать его локально с помощью пути к файлу pdf. PHP работает на сервере, создайте папку для pdf и используйте его для Imagick. – Ryan

ответ

2

С ImageMagick PHP extension documentation page, то Imagick конструктор необхо- FileName параметры, которые могут быть либо локальный файл или URL-адрес. :

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

Вы должны передать URL напрямую, без file_get_contents потоки PHP файлов довольно мощный.

Другим решением для вас будет хранить файл локально (см tempnam() и file_put_contents), но если вы не используете его для чего-нибудь еще, чем преобразование его в изображение, это довольно бесполезно:

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

Спасибо, это решение работает. Вы сохранили мой день. Отмечая ответ как принятый. – user1107888

Смежные вопросы