本文最后更新于2021-06-11,已超过 1年没有更新,如果文章内容、图片或者下载资源失效,请留言反馈,我会及时处理,谢谢!
温馨提示:本文共1604个字,读完预计5分钟。
最近遇到一个需求,需要将pdf在web或者app中进行展示。有很多js控件或者app空间可以直接展示pdf,或者说很多第三方外链可以做到直接展示pdf文件的内容。
第三方不说了,他们做的优化足够好,但是集成到web或pc中样式是否可以接受?
用第三方空间,无疑增加了前段的处理压力和展示时间(如果pdf过大,js处理可能会需要很久才能展示图片,而且还有遇见过方向错误等问题)
so: 没错,可以吧pdf转化成图片,返回给客户端展示啊。
按照这个思路我就写了php版本的pdf转图片的。
开始
以centos系统环境为例子吧。
php要实现将pdf转化成图片,主要依赖于一个软件:ImageMagick,没错他是一个强大的图片处理软件。在centos上,该软件想要读取pdf,依赖于另外一个软件Ghostscript(gs),该软件能够帮助ImageMagick读取pdf文件内容。
安装gs
1 2 3 4 5 6 |
安装gs(不安装gs,会导致读取pdf失败) 下载最新版本 tar -zxvf ./configure --prefix=/usr/local/ghostscript make all make install |
gs的指令必须在usr/bin/gs,请务必确认/usr/bin/gs是否存在,不存在ln 进来。
安装ImageMagick
1 2 3 4 5 |
下载地址:ftp://ftp.u-aizu.ac.jp/pub/graphics/image/ImageMagick/imagemagick.org/ImageMagick-7.0.9-1.tar.gz tar -zxvf ./ImageMagick-7.0.8-68.tar.gz ./configure -prefix=/usr/local/imagemagick make make install |
安装ImageMagick扩展
1 2 3 4 5 6 7 8 |
wget https://pecl.php.net/get/imagick-3.4.4.tgz tar -zxvf ./imagick-3.4.4.tgz /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick/ make make install php.ini文件中写入扩展:imagemagick.so |
使用demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$im = new \Imagick(); $im->setCompressionQuality(50); $im->setResolution(100, 100); $im->readImage($img . "[4]"); // 一定要在设置Resolution后读取文件,保证清晰度(如果先读取文件再设置清晰度,亲测清晰度和质量很低) $im->scaleImage(1190, 1682); $im->setImageBackgroundColor('white'); $im->setImageUnits(1); $im = $im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN); //不设置,无法出现白底,png默认透明,jpg黑底 $filename = md5($img).'_5' . '.jpg'; $filePath = __ROOT__ .'/public/uploads/signImg/'.$filename; $im->setImageFormat('jpeg'); $res = $im->writeImage($filePath); $im->clear(); $im->destroy(); // 使用后请务必及时销毁,读写文件的内存资源很重要 |