PHP word文档转图片 课件转图片

PHP word文档转图片 课件转图片


需求:

docx pptx 等word文档每一页转成图片使用


需要:

php(必须开启imagick扩展,如果是宝塔直接开扩展。php.ini解除exec()禁用) 安装

imagemagick(命令行执行下convert就知道了有没装) 安装 (yum install ImageMagick)

ghostscript 安装 (yum install ghostscript)

Libreoffice 安装 (不过我偷懒了,直接yum install -y libreoffice*,懒得整语言包,多点就多点)


过程:

docx(pptx...)等word文档 通过Libreoffice转成PDF文件,然后通过imagemagick转成一张张图片


相关命令行:

其实只是使用到了两个命令

soffice --headless --invisible --convert-to pdf 1.docx    用Libreoffice将1.docx转得1.pdf文件

convert -density 300 1.pdf result.png                           用imagemagick将PDF转成图片(-density是分辨率),pdf多少页就会是多少张图片

(可选)convert -flatten 1.png 1-result.png                 将PNG文件转成白底。当然可以在第二步直接文件搞成JPG格式这就默认白底了,但是我觉得质量有点差,选用了png


PHP代码:

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;

}

$files = ['1.docx','2.pptx'];

foreach ($files as $file) {

    exec("soffice --headless --invisible --convert-to pdf {$file}");

    $dir = "/root/result/$file/";

    !is_dir($dir) && mkdir($dir, 0777, true);

    if ($result = pdf2png("/root/{$file}", $dir)) {

        foreach ($result as $image) {

            exec("convert -flatten $image $image"); //可选,png图片转成白底

        }

    }

}


效果 :



你可能感兴趣的:(PHP word文档转图片 课件转图片)