php pdf转图片

2020-05-29

php7.0 + Imagick-3.4.2 + ImageMagick-6.9.3-7-vc14-x64 + ghostscript 9.20实现pdf转图片

使用环境

下载拓展imagick

http://pecl.php.net/package/imagick
下载对应php版本 ts还是nts x86还是x64imagick 这里以phpinfo()为准

安装拓展imagick

  1. 解压上述下载的文件后,将php_imagick.dll复制到php/ext目录,或者其他你的存放拓展的目录
  2. 修改php.ini 加上extension=php_imagick.dll,注意php可能有多个ini,以phpinfo为准
  3. 此时复制解压上述文件目录中其他dll到php目录,重启nginx,此时phpinfo显示拓展安装成功,但是 ImageMagick number of supported formats为0,到这里成功安装了一半下载imagemagick程序

下载imagemagick程序

https://windows.php.net/downloads/pecl/deps/

1、下载对应版本的软件版本,是vc11还是vc14还是vc15 3.x86还是x64 都要以phpinfo为准

2、官网上下载的软件根据官网的信息显示,可能会不支持

安装imagemagick程序

  1. 下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 例:F:\ImageMagick-6.9.3-7-vc14-x64
  2. 配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“F:\ImageMagick-6.9.3-7-vc14-x64\bin”填入即可(win7 win10配置方法不同,但是位置相同)
  3. 将“F:\ImageMagick-6.9.3-7-vc14-x64\bin”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录

扩展安装完成后重启计算机

安装ghostscript

imagemagick本身不能处理pdf,处理pdf还需要安装ghostscrip

下载地址:https://github.com/ArtifexSoftware/ghostpdl-downloads/releases?after=gs924rc2

下载的版本需要能被imagemagick调用,如果下载后,imagemagick处理pdf时提示imagemagick停止,那么下载其他版本的ghostscrip再进行尝试

windows下载gs920w64.exe文件安装即可,安装后将ghostscrip的bin目录(C:\Program Files\gs\gs9.20\bin)加入到环境变量中

测试安装是否有效,在命令行执行 convert.exe  C:\Users\Administrator\Desktop\1.pdf  2.png

F:\ImageMagick-6.9.3-7-vc14-x64\bin>convert.exe C:\Users\Administrator\Desktop\1.pdf 2.png
convert.exe: UnableToOpenConfigureFile `delegates.xml' @ warning/configure.c/GetConfigureOptions/706.

虽然提示了一个警告,但是图片确实已经生成,这表明 扩展已经安装成功,就可以去使用php去调用了

/**
 * 将pdf文件转化为多张png图片
 * @param string $pdf  pdf所在绝对路径
 * @param string $path 新生成图片所在绝对路径
 * @return array|bool
 */
function pdf2png($pdf, $path)
{
    if (!extension_loaded('imagick')) return false;
    if (!file_exists($pdf)) return false;
    $im = new Imagick();
    $im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
    $im->setCompressionQuality(100);
    $im->readImage($pdf);
    foreach ($im as $k => $v) {
        $v->setImageFormat('png');
        $fileName = $path . md5($k . time()) . '.png';
        if ($v->writeImage($fileName) == true) {
            $return[] = $fileName;
        }
    }
    return $return;
}
 
/**
 * 将pdf转化为单一png图片
 * @param string $pdf  pdf所在绝对路径
 * @param string $path 新生成图片所在绝对路径
 *
 * @throws Exception
 */
function pdf2png2($pdf, $path)
{
    try {
        $im = new Imagick();
        $im->setCompressionQuality(100);
        $im->setResolution(120, 120);//设置分辨率 值越大分辨率越高
        $im->readImage($pdf);
 
        $canvas = new Imagick();
        $imgNum = $im->getNumberImages();
        //$canvas->setResolution(120, 120);
        foreach ($im as $k => $sub) {
            $sub->setImageFormat('png');
            //$sub->setResolution(120, 120);
            $sub->stripImage();
            $sub->trimImage(0);
            $width  = $sub->getImageWidth() + 10;
            $height = $sub->getImageHeight() + 10;
            if ($k + 1 == $imgNum) {
                $height += 10;
            } //最后添加10的height
            $canvas->newImage($width, $height, new ImagickPixel('white'));
            $canvas->compositeImage($sub, Imagick::COMPOSITE_DEFAULT, 5, 5);
        }
 
        $canvas->resetIterator();
        $canvas->appendImages(true)->writeImage($path . microtime(true) . '.png');
    } catch (Exception $e) {
        throw $e;
    }

}

文章来源于:https://www.cnblogs.com/jinxiblog/p/8053008.html

https://blog.csdn.net/jeff_love_marina/article/details/80838055

{/if}