2013-09-06 4 views
2

Я попытался сделать миниатюру pdf-файла, который размещен на другом сервере. Мой текущий код:Создайте миниатюру ONLINE PDF для первой страницы только с помощью Imagick

<?php 
$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf"); 
$im->setImageFormat('jpg'); 
header('Content-Type: image/jpeg'); 
echo $im; 
?> 

Проблема заключается в том, что код только генерации миниатюры для последней страницы файла PDF. Как сделать миниатюру только для первой страницы? Я попытался добавить [0] на линию воображения.

$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf[0]"); 

но это не сработало. Он работает только для локальных файлов PDF, то есть:

$im = new imagick("my-pdf-file.pdf[0]"); 

Пожалуйста, помогите мне решить эту проблему .. Спасибо ..

ответ

4

Вам нужно сбросить активное изображение на первой странице. Это можно сделать с помощью Imagick::setIteratorIndex.

<?php 
$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf"); 
$im->setIteratorIndex(0); 
$im->setImageFormat('jpg'); 
header('Content-Type: image/jpeg'); 
echo $im; 
?> 
0

"Это может быть сделано с Imagick :: setIteratorIndex. .."

..or нет. Просто не имеет никакого эффекта. Установка в один выходит из строя что-то, установив его на 0 получает последняя страница ..

function make_thumbnail($filename) 
    { 

    try 
     { 
     $imagick= new Imagick($filename); 
     } 
    catch(ImagickException $e) 
     { 
     // failed to make a thimbynail. what now? 
     // load up our trusty truetype font png instead? 
     $imagick->destroy(); 
     return "0"; // shove any rubbish in the db - it will just say no image available when asked. 
     } 
    $imagick->setIteratorIndex(0);// rewind to first page or image of a multi series 
    $imagick->setImageFormat("png"); // turn it into a png 
    $imagick = $imagick->flattenImages(); // remove any transparency 

    $imagick->scaleImage(300,0); //resize...to less than 300px wide 
    $d = $imagick->getImageGeometry(); 
     $h = $d['height']; 
     if($h > 300) 
     $imagick->scaleImage(0,300); 
    $imagick->setImageCompression(\Imagick::COMPRESSION_UNDEFINED); 
    $imagick->setImageCompressionQuality(0); 
    $imagick->setIteratorIndex(0); 
    $a = $imagick->getImageBlob(); // output as bytestream 
    $imagick->destroy(); 
    return $a; 
    } 
0

Try ...

$im->setImageIndex(0); //this will return 1th page of the pdf file 
$im->setImageFormat('jpg');