在PHP中创建PDF缩略图并缓存它

时间:2012-10-08 14:10:58

标签: php pdf imagick

我正在使用基于PHP的通用CMS,我想创建一个脚本,读取pdf创建的缩略图并缓存它。有很多不同的答案,我确实在不同版本的imagick中遇到了一些问题,但这是适合我的脚本。

有些人可能觉得它很有用,也许有人可以建议我,如果它被优化了吗?

<?php

$loc = *the file location*;
$pdf = *the file name*;
$format = "jpg";
$dest = "$loc$pdf.$format";

if (file_exists($dest))
        {
        $im = new imagick();
        $im->readImage($dest);
        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
        }
else
    {
        $im = new imagick($loc.$pdf.'[0]');
        $im->setImageFormat($format);

        $width = $im->getImageheight();
        $im->cropImage($width, $width, 0, 0);
        $im->scaleImage(110, 167, true);

        $im->writeImage($dest);

        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
    }

?>

3 个答案:

答案 0 :(得分:1)

利用PHP和ImageMagick创建PDF缩略图

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

在本文中,我们将讨论如何使用PHP和ImageMagick从给定的PDF生成缩略图,将它们存储在临时(或“缓存”)目录中,并将它们提供给Web。

我们最近的一位客户要求显示我们为他们部署的Joomla CMS发布的PDF缩略图。

要求相当简单,但执行起来要多得多。安装ImageMagick,ImageMagick PHP绑定(顺便提一下,并设计了解决方法),并调整了一些代码后,确定了以下解决方案:

<?php
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);
}
?>

上面的代码假设您已经为临时目录(通常是chmod 755或chmod 777,具体取决于您的勇气程度)提供了相应的权限,您已将上述代码段保存在名为thumbPdf.php的文件中,并将其放置在您的Web服务器上可见的位置。

从GET获取参数后,代码检查目标临时目录,如果不存在所需图像,则使用ImageMagick的转换程序生成PDF缩略图,大小调整为适当的比例,并将图像保存在临时目录。最后,它将缩略图重新加载到ImageMagick PHP对象中,并将内容输出到浏览器。

调用上面的代码相当容易;只需从图像标记中调用PHP脚本,如下所示:

<img src="/path/to/thumbPdf.php?pdf=your.pdf&size=200" />

上面的代码会从“your.pdf”的第一页生成一个缩略图,大小为200像素宽,高度恰当。

祝你好运,并且开心网站管理!

答案 1 :(得分:1)

我知道这里已经讨论过了:

Should I use a PHP extension for ImageMagick or just use PHP's Exec() function to run the terminal commands?

引用drew101:

  

使用PHP扩展而不是使用exec,您将获益良多   或类似的功能。内置扩展将更快,使用更少   内存,因为您不必生成新进程并读取输出   背部。图像对象将直接在PHP中提供,而不是   必须读取文件输出,这应该使图像更容易   与之合作。

     

如果您有一个繁忙的网站,可能会创建大量进程来编辑图像   开始减慢速度并消耗额外的内存。

答案 2 :(得分:0)

如果您因某种原因未安装Imagick php库,可以使用ghost脚本并使用以下示例生成pdf缩略图:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=xyz.jpg xyz.pdf');