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)\ImageMagick\bin”填入即可
  將“E:\Program Files (x86)\ImageMagick\bin”目錄中的所有的以“.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM