Миниатюра изображения PDF с использованием ImageMagick и PHP - PullRequest
3 голосов
/ 08 марта 2012

После поиска в Google и SO я нашел этот небольшой кусочек кода для создания эскизов документов PDF с помощью ImageMagick.

Проблема для меня заключается в том, чтобы внедрить его в мою тему WordPress.Я думаю, что я застрял на пути к кешу, который нужен сценарию для временных файлов.

Я использую его, как описано в статье:

<img src="http://localhost/multi/wp-content/themes/WPalchemy-theme/thumbPdf.php?pdf=http://localhost/multi/wp-content/uploads/2012/03/sample.pdf&size=200 />

, что должно быть правильно (возможно ... но я предполагаю, что я правильно использовать полныйURL к реальному файлу), потому что, когда я нажимаю на этот URL, я попадаю на страницу, которая читает следующую ошибку:

Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png

Теперь tmp определен в thumbPdf.phpсценарий, но я не совсем понимаю, какое это должно быть значение.Это URL или путь?Как Timthumb.php, я могу сделать его относительно сценария thumbPdf.php?(Я попытался ./cache, который является настройкой в ​​timthumb -и был уверен, что в моем корне темы была папка / cache, но безрезультатно).Кроме того, к вашему сведению я помещаю папку / tmp в свой корень и все еще получаю ту же ошибку.

Так как мне настроить tmp , чтобы эта работа работала?

http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/

function thumbPdf($pdf, $width)
{
    try
    {
        $tmp = 'tmp';
        $format = "png";
        $source = $pdf.'[0]';
        $dest = "$tmp/$pdf.$format";

        if (!file_exists($dest))
        {
            $exec = "convert -scale $width $source $dest";
            exec($exec);
        }

        $im = new Imagick($dest);
        header("Content-Type:".$im->getFormat());
        echo $im;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}

$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
    thumbPdf($file, $size);
}

Я видел этот ответ: Как мне преобразовать документ PDF в изображение для предварительного просмотра в PHP? и собираюсь попробовать его в следующем

1 Ответ

1 голос
/ 16 июля 2013

Ошибка говорит все, что вам нужно.

 Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png 

Скрипт в данный момент пытается прочитать файл с серверов tmp / folder.

 $tmp = 'tmp';
 $format = "png";
 $source = $pdf.'[0]';
 //$dest = "$tmp/$pdf.$format";
 $dest = "$pdf.$format";

Помните, с точки зрения безопасности это не очень хорошо выглядит, кто-то может использовать ошибку ImageMagic для достижения очень неприятных результатов, предоставив вашему скрипту искаженный внешний источник pdf. Вы должны по крайней мере проверить, является ли изображение из разрешенного источника, например, запрос исходит от того же хоста.

Лучший способ работы с ImageMagic - всегда сохранять сгенерированное изображение и генерировать новое изображение, только если сгенерированное изображение не существует. Некоторые операции с ImageMagic довольно тяжелые для больших файлов, поэтому вы не хотите обременять свой сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...