前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php如何将pdf为图片(PNG)

php如何将pdf为图片(PNG)

作者头像
美团骑手
发布2021-12-24 18:46:37
1K0
发布2021-12-24 18:46:37
举报
文章被收录于专栏:技术进阶
  • 开发过程中总会遇到pdf预览的问题,下面是其中一个解决方案
  • 无论是转化为多张还是单张图片,都需要安装PHP的Imagick扩展。可以根据下面的代码进行优化,比如自定义分辨率,自动检测文件目录,进行压缩等
代码语言:javascript
复制
/**
 * 将pdf文件转化为多张png图片
 * @param string $pdf  pdf所在路径 (/www/pdf/test.pdf pdf所在的绝对路径)
 * @param string $path 新生成图片所在路径 (/www/images/)
 *
 * @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/test.pdf pdf所在的绝对路径)
 * @param string $path 新生成图片所在路径 (/www/images/)
 *
 * @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);
        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 += 10;
            } //最后添加10的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;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档