PHP使用Imagick+GhostScript转换PDF为图片(Windows环境)

简介

ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、PNG、PDF以及PhotoCD等格式。Ghostscript是一套基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。

使用PHP将PDF文档转换为图片需要安装Imagemagick软件、PHP的Imagick扩展、GhostScript软件。

安装

安装Imagemagick

下载地址:http://windows.php.net/downloads/pecl/deps/

我下载的是:ImageMagick-7.1.0-18-vc15-x64.zip

下载并解压至指定目录,然后把目录中的bin文件夹添加到path环境变量:

测试是否安装成功

打开cmd进入一个有图片的文件夹,测试是否可以完成图片格式的转换:

magick convert 1.jpg 1.gif

测试pdf转png

magick convert -density 300 -trim test.pdf -quality 100 test.png

安装Imagick扩展

安装Imagemagick软件后,还需安装PHP的Imagick扩展。下载地址:http://windows.php.net/downloads/pecl/releases/imagick/
注意要与phpinfo中的版本一致。

根据我的环境,我下载的是php_imagick-3.7.0-7.4-ts-vc15-x64.zip

打开php.ini,在末尾添加:

extension=imagick

重启PHP服务。

测试是否安装成功

查看phpinfo,显示如下界面则说明安装成功:

安装GhostScript

下载地址:https://www.ghostscript.com/releases/gsdnld.html

安装后需要将\gs\gs9.55.0\bin目录添加至path环境变量。

测试是否安装成功

打开cmd进入一个有pdf文档的文件夹,在该文件夹下创建一个output文件夹(用于存放转换后的图片),测试是否可以将pdf文档转换为图片:

gswin64c -dSAFER -dBATCH -dNOPAUSE -r250 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jpeg -sOutputFile=output/%d.jpg 1.pdf

PHP转换程序

上面的安装够完成后,下面使用php代码来完成pdf=>png的转换,直接上代码:

/**
 * PDF2PNG
 * @param $pdf  待处理的PDF文件
 * @param $path 待保存的图片路径
 * @param $page 待导出的页面 -1为全部 0为第一页 1为第二页
 * @return      保存好的图片路径和文件名
 */
function pdf2png($pdf, $path, $page = -1)
{
    if (!extension_loaded('imagick')) {
        return false;
    }
    if (!file_exists($pdf)) {
        return false;
    }
    $im = new Imagick();
    $im->setResolution(120, 120);
    $im->setCompressionQuality(100);
    if ($page == -1)
        $im->readImage($pdf);
    else
        $im->readImage($pdf . "[" . $page . "]");
    foreach ($im as $key => $val) {
        $val->setImageFormat('png');
        $filename = $path . "/" . $key . '.png';
        if ($val->writeImage($filename) == true) {
            $return[] = $key . '.png';
        }
    }
    return $return;
}

$pdfPath = __DIR__ . "/test.pdf";      //要转换为图片的pdf的绝对地址
$outputFolder = __DIR__ . "/output";     //输出图片的目录
$imgs = pdf2png($pdfPath, $outputFolder);
for ($i = 0, $count = count($imgs); $i < $count; $i++) {
    echo "<div align=center><font color=red>Page " . ($i + 1) . "</font><br><a href=\"ouput/" . $imgs[$i] . "\" target=_blank><img border=3 height=120 width=90 src=\"ouput/" . $imgs[$i] . "\"></a></div><p>";
}

效果:

其他

生成jpg时出现黑色的背景,可以添加以下代码解决:

$im->setImageFormat('jpg');
$im->setBackgroundColor('white');
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);

设置图片尺寸:

$im->scaleImage(945, 1336.45, true);

发表评论

邮箱地址不会被公开。 必填项已用*标注