宝塔面板php 实现pdf转图片
宝塔面板安装php的 imagemagick 这个插件 看好对应版本
目录结构如图
出现问题
Fatal error: Uncaught exception 'ImagickException' with message 'FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT安装 ghostscript
wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs9561/ghostscript-9.56.1.tar.gz tar -zxvf ghostscript-9.56.1.tar.gz -C /usr/local/ cd /usr/local/ghostscript-9.56.1 ./configure make make install
方法一:编辑 index.php
function pdf2png($pdf,$path,$page=-1) { if(!extension_loaded('imagick')) { return false; } if(!file_exists($pdf)) { return false; } $im = new Imagick(); $im->setResolution(120,120); $im->setCompressionQuality(100); if($page==-1){ $im->readImage($pdf); } else{ $im->readImage($pdf."[".$page."]"); } foreach ($im as $Key => $Var) { $Var->setImageFormat('png'); $filename = $path."/". ++$i.'.png'; if($Var->writeImage($filename) == true) { $Return[] = $filename; } } return $Return; } $fileName="./pdf/secret.pdf"; $fileDir = substr($fileName, 0,-4); if(!is_dir($fileDir)){ mkdir($fileDir); } print_r(pdf2png($fileName,$fileDir));
输入网址 www.XXX.com/pdf2image/index.php 则会生成文件名字对应的图片目录
方法二:编辑index.php
function numeroPaginasPdf($archivoPDF) //查询pdf文件的总页数 { $pdfname = $archivoPDF; $pdftext = file_get_contents($pdfname); $num = preg_match_all("/\/Page\W/", $pdftext, $dummy); return $num; } function shell2img($file,$path,$page){ $cmd = 'gs -dQUIET -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dFirstPage=1 -dLastPage='.$page.' -sOutputFile='.$path.'/%d.jpg '.$file; echo $cmd; shell_exec($cmd); } $fileName="./pdf/thinkphp.pdf"; $pdfpath = dirname(__FILE__)."/".$fileName; $dirpath = dirname(__FILE__)."/". substr($fileName, 0,-4); if(!is_dir(substr($fileName, 0,-4))){ mkdir(substr($fileName, 0,-4)); } $pageCount = numeroPaginasPdf($fileName); shell2img($pdfpath,$dirpath,$pageCount);
总结 这两种方法是有区别的
第一种方法相对比较安全一些,但是慢,有多慢呢?会死的那种;
第二种方法由于使用到了函数 shell_exec 安全方面会需要注意一些,因为这个函数通常属于被禁用的函数,是否转换完成没有反馈
第二种方法直接使用的是shell脚本来操作的所以相对于第一种方法快很多。
安全和速度需要权衡一下