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图片转成白底
}
}
}
效果 :