• PHP pdf转png windows版本


    链接:https://pan.baidu.com/s/1Bli-2HkucRTYTeujkcsmjg&shfl=sharepset
    提取码:2une

    1.php_imagick扩展 

      (1)下载php_imagick扩展

      下载地址一: http://windows.php.net/downloads/pecl/releases/imagick/
      下载地址二: https://pecl.php.net/package/imagick
      要点: 注意对应php版本 ts还是nts x86还是x64
      这里以phpinfo()为准

     (2)安装 

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

    2.imagemagick程序

     (1)imagemagick程序

      下载地址:http://windows.php.net/downloads/pecl/deps/
      imagemagick还有官网下载,此处不鼓励从imagemagick官方下载,他们的网站上我并没有找到历史版本下载,安装失败的几率很大
      下载与phpinfo提示一致的版本,此时需要注意  : 1.软件版本对应     2.vc11还是vc14 3.x86还是x64 都要以phpinfo为准

     (2)安装imagemagick 

      下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 E:Program Files (x86)
      配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“E:Program Files (x86)ImageMagickin”填入即可
      将“E:Program Files (x86)ImageMagickin”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录,应该有145个

      重启计算机

      然后你就可以在phpinfo里看到

       注意:如果运行php代码出现

    3.安装ghostscript

      https://www.ghostscript.com/download/gsdnld.html

      下载适合电脑的版本,安装后将安装目录的bin目录配置到环境变量里,运行cmd,  运行gswin64出现以下画面就是安装成功(我安装的是windows64位的,所以命令是gswin64)

      注意:如果ghostscript的版本不适合的时候运行php会导致php-cgi崩溃,如果出现这种情况就是ghostscript版本不适合

    4.php代码

        /**
         * 将pdf文件转化为多张png图片
         * @param string $pdf  pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
         * @param string $path 新生成图片所在路径 (/www/pngs/)
         *
         * @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所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
         * @param string $path 新生成图片所在路径 (/www/pngs/)
         *
         * @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);
                $old_height = 0;
                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 = $old_height;
                    }else{
                        $old_height = $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;
            }
        }

    5.效果图

    注意:文件太大时要注意php的运行最长时间time of 30 seconds exceeded的报错。

      解决方法: 在php.ini中增加运行时间:max_execution_time=300   或者  在PHP文件中添加如下代码ini_set('max_execution_time', 300); //300 seconds = 5 minutes

  • 相关阅读:
    nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)
    通过redis的monitor命令排除故障
    redis数据过期策略【转】
    PHP通用分页类page.php[仿google分页]
    简洁php的MVC框架
    Jquery插件开发之图片放大镜效果(仿淘宝)
    PHPCMS V9标签循环嵌套调用数据的方法
    虚拟主机服务器php fsockopen函数被禁用的解决方法
    PHPCMS V9 fsockopen 函数被禁用解决方案
    PHP IN_ARRAY 函数 使用需要注意的地方
  • 原文地址:https://www.cnblogs.com/houss/p/11719497.html
Copyright © 2020-2023  润新知