13
2025
03
19:58:23

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的转换,直接上代码:


  1. /**

  2. * PDF2PNG

  3. * @param $pdf  待处理的PDF文件

  4. * @param $path 待保存的图片路径

  5. * @param $page 待导出的页面 -1为全部 0为第一页 1为第二页

  6. * @return      保存好的图片路径和文件名

  7. */

  8. function pdf2png($pdf, $path, $page = -1)

  9. {

  10.    if (!extension_loaded('imagick')) {

  11.        return false;

  12.    }

  13.    if (!file_exists($pdf)) {

  14.        return false;

  15.    }

  16.    $im = new Imagick();

  17.    $im->setResolution(120, 120);

  18.    $im->setCompressionQuality(100);

  19.    if ($page == -1)

  20.        $im->readImage($pdf);

  21.    else

  22.        $im->readImage($pdf . "[" . $page . "]");

  23.    foreach ($im as $key => $val) {

  24.        $val->setImageFormat('png');

  25.        $filename = $path . "/" . $key . '.png';

  26.        if ($val->writeImage($filename) == true) {

  27.            $return[] = $key . '.png';

  28.        }

  29.    }

  30.    return $return;

  31. }

  32. $pdfPath = __DIR__ . "/test.pdf";      //要转换为图片的pdf的绝对地址

  33. $outputFolder = __DIR__ . "/output";     //输出图片的目录

  34. $imgs = pdf2png($pdfPath, $outputFolder);

  35. for ($i = 0, $count = count($imgs); $i < $count; $i++) {

  36.    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>";

  37. }


效果:
image.png


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

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

设置图片尺寸:

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




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://sg.hqyman.cn/post/9561.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: