>  기사  >  백엔드 개발  >  PHP를 사용하여 PDF를 이미지로 변환하고 이미지를 스플라이스하는 방법(코드 첨부)

PHP를 사용하여 PDF를 이미지로 변환하고 이미지를 스플라이스하는 방법(코드 첨부)

不言
不言원래의
2018-07-19 11:40:118451검색

PHP를 사용하여 PDF를 이미지로 변환하는 방법에서 가장 중요한 것은 서버 측에 ImageMagick 확장 프로그램을 설치하는 것입니다. ImageMagick 확장을 사용하면 다음 코드를 사용하여 구현할 수 있습니다.

* @param $pdf 처리할 PDF 파일
* @param $path 저장할 이미지 경로
* @param int|내보낼 페이지 $page 내보낼 페이지 - 모두 1 첫 번째 페이지는 0 첫 번째 페이지는 1 두 번째 페이지
* @return 저장된 이미지 경로 및 파일 이름 참고: Imagick의 $pdf 경로 및 $path 경로의 경우 PHP 버전 5 이상에서는 상대 경로를 사용할 수 있습니다. php7+ 버전은 절대 경로를 사용해야 합니다. 따라서 모든 사람이 절대 경로를 사용하는 것이 좋습니다.
참고: 이는 함정입니다. Imagick의 $pdf 경로 및 $path 경로는 PHP 버전 5 이상에서 상대 경로를 사용할 수 있습니다. php7+ 버전은 절대 경로를 사용해야 합니다. 따라서 모든 사람이 절대 경로를 사용하는 것이 좋습니다.

PHP를 사용하여 PDF를 이미지로 변환하는 방법에 대한 자세한 내용은 다음 특정 예제 코드를 참조하세요.

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date Time: 2018/7/16 16:13
 * Author: Wanzhou Chen
 * Email: 295124540@qq.com
 */
 
namespace utils;
 
 
class Handler
{
    /**
     * PDF2PNG
     * @param $pdf  待处理的PDF文件
     * @param $path 待保存的图片路径
     * @param int|待导出的页面 $page 待导出的页面 -1为全部 0为第一页 1为第二页
     * @return 保存好的图片路径和文件名 注:此处为坑 对于Imagick中的$pdf路径 和$path路径来说,   php版本为5+ 可以使用相对路径。php7+版本必须使用绝对路径。所以,建议大伙使用绝对路径。
     * 注:此处为坑 对于Imagick中的$pdf路径 和$path路径来说,   php版本为5+ 可以使用相对路径。php7+版本必须使用绝对路径。所以,建议大伙使用绝对路径。
     */
    static function pdfToPng($pdf,$path,$page=-1)
    {
        if(!extension_loaded(&#39;imagick&#39;))
        {
            return 1;
        }
        if(!file_exists($pdf))
        {
            return 2;
        }
        if(!is_readable($pdf))
        {
            return 3;
        }
        $im = new \Imagick();
        $im->setResolution(150,150);
        $im->setCompressionQuality(100);
        if($page==-1){
            $im->readImage($pdf);
        } else{
            $im->readImage($pdf."[".$page."]");
        }
 
        foreach ($im as $Key => $Var)
        {
            $Var->setImageFormat(&#39;png&#39;);
            $filename = $path. md5($Key.time()).&#39;.png&#39;;
            if($Var->writeImage($filename) == true)
            {
                $Return[] = $filename;
            }
        }
        //返回转化图片数组,由于pdf可能多页,此处返回二维数组。
        return $Return;
    }
 
 
    /**
     * spliceimg
     * @param array $imgs pdf转化png  路径
     * @param string $img_path
     * @return string 将多个图片拼接为成图的路径
     * 注:多页的pdf转化为图片后拼接方法
     * @internal param string $path 待保存的图片路径
     */
    static function spliceImg($imgs = array(),$img_path = &#39;&#39;)
    {
 
        $width = 500; //自定义宽度
        $height = null;
        $pic_tall = 0;//获取总高度
        foreach ($imgs as $key => $value) {
            $arr = getimagesize($value);
            $height = $width/$arr[0]*$arr[1];
            $pic_tall += $height;
        }
        $pic_tall = intval($pic_tall);
        // 创建长图
        $targetImg = imagecreatetruecolor($width,$pic_tall);
        //分配一个白色底色
        $color = imagecolorAllocate($targetImg,255,255,255);
        imagefill($targetImg,0,0,$color);
 
        $tmp  = 0;
        $tmpy = 0; //图片之间的间距
        $src = null;
        $size = null;
        foreach ($imgs as $k => $v) {
            $src = Imagecreatefrompng($v);
            $size = getimagesize($v);
            //5.进行缩放
            imagecopyresampled($targetImg,$src, $tmp, $tmpy,0,0,$width,$height,$size[0],$size[1]);
            //imagecopy($targetImg, $src, $tmp, $tmpy, 0, 0, $size[0],$size[1]);
            $tmpy = $tmpy + $height;
            //释放资源内存
            imagedestroy($src);
            unlink($imgs[$k]);
        }
        $returnfile = $img_path.date(&#39;Y-m-d&#39;);
        if (!file_exists($returnfile))
        {
            if (!self::makeDir($returnfile))
            {
                /* 创建目录失败 */
                return false;
            }
        }
        $return_imgpath = $returnfile.&#39;/&#39;.md5(time().$pic_tall.&#39;pdftopng&#39;).&#39;.png&#39;;
        imagepng($targetImg,$return_imgpath);
        return $return_imgpath;
 
    }
 
 
    /**
     * makeDir
     * @param string $folder 生成目录地址
     * 注:生成目录方法
     * @return bool
     */
    static function makeDir($folder)
    {
        $reval = false;
        if (!file_exists($folder))
        {
            /* 如果目录不存在则尝试创建该目录 */
            @umask(0);
            /* 将目录路径拆分成数组 */
            preg_match_all(&#39;/([^\/]*)\/?/i&#39;, $folder, $atmp);
            /* 如果第一个字符为/则当作物理路径处理 */
            $base = ($atmp[0][0] == &#39;/&#39;) ? &#39;/&#39; : &#39;&#39;;
            /* 遍历包含路径信息的数组 */
            foreach ($atmp[1] AS $val)
            {
                if (&#39;&#39; != $val)
                {
                    $base .= $val;
                    if (&#39;..&#39; == $val || &#39;.&#39; == $val)
                    {
                        /* 如果目录为.或者..则直接补/继续下一个循环 */
                        $base .= &#39;/&#39;;
                        continue;
                    }
                }
                else
                {
                    continue;
                }
                $base .= &#39;/&#39;;
                if (!file_exists($base))
                {
                    /* 尝试创建目录,如果创建失败则继续循环 */
                    if (@mkdir(rtrim($base, &#39;/&#39;), 0777))
                    {
                        @chmod($base, 0777);
                        $reval = true;
                    }
                }
            }
        }
        else
        {
            /* 路径已经存在。返回该路径是不是一个目录 */
            $reval = is_dir($folder);
        }
        clearstatcache();
        return $reval;
    }
}

pdf를 png로 변환하고 이미지를 접합하는 명령문을 호출하세요. pdf를 png로 변환하고 이미지를 접합하세요. (ios 미리보기와 호환되며 서명 문제를 표시할 수 없음)

  // 把pdf转成png,并拼接图片(兼容ios预览无法显示签章问题)
        $imgArr = Handler::pdfToPng($path,$_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/file/&#39;);
        $img = &#39;&#39;;
        if($imgArr&&is_array($imgArr)){
            $img = Handler::spliceImg($imgArr,$_SERVER[&#39;DOCUMENT_ROOT&#39;].&#39;/file/agreement/&#39;);
        }

관련 권장 사항:

PHP WkHtmlToPdf/WkHtmlToImage 웹 페이지를 PDF 및 그림으로 직접 변환

PHP에서 imagick을 사용하여 PDF를 그림으로 변환

위 내용은 PHP를 사용하여 PDF를 이미지로 변환하고 이미지를 스플라이스하는 방법(코드 첨부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.