今天晚上終於有時間來整理一下pdf轉圖片的記錄了。因爲公司項目中要做一個這樣的項目--電子雜誌,要用到pdf轉圖片的功能。所以我就研究一下。
主要來講,這個功能用一個composer包就能完成,但是在開發的過程中,踩了許多坑,所以爲了大家不要在採坑了或者少踩一點坑,我把我實現成功的過程記錄下來,供大家參考一下。
主要有3點:
1.環境和擴展的安裝
1.1安裝imagick擴展
1.2linux系統安裝ImageMagick-devel運行程序
1.3linux系統安裝ghostscript(後面會講到)解決報678錯誤的關鍵點哦
2.加載spatie/pdf-to-image依賴(composer)
3.代碼
1.安裝PHP的imagick擴展。
wget http://pecl.php.net/get/imagick-3.4.3.tgz
tar -xvf imagick-3.4.3.tgz
cd imagick-3.4.3/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
這一步會出現了下面配置文件不存在。就是因爲沒有安裝上面2.1中的那個軟件的,所以執行下面的操作。
yum install ImageMagick-devel
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
見到如上圖所示以後就說明imagick擴展加載成功了。然後打開php.ini文件,加上如下的命令:
和上面圖片的文件擴展路徑對應,然後重啓服務器。
2.安裝擴展包
因爲我用的是tp5,所以使用了composer
composer require spatie/pdf-to-image。
如果你沒有安裝擴展的話就composer不成功。
3. 代碼
class Index extends Controller {
/**
* pdf裝成png圖片
*/
public function pdftopng(){
//實例化對象之前加反斜槓,注意pdf文件的路徑
$pdf = new \Spatie\PdfToImage\Pdf('../public/datas/jianli.pdf');
foreach (range(1, $pdf->getNumberOfPages()) as $pageNumber) {
$pdf->setPage($pageNumber)
->saveImage('../public/datas/png/page'.$pageNumber.'.jpg');
}
}
}
然後執行完成以後查看生成的圖片文件
執行過程中如果一直報:error/pdf.c/ReadPDFImage/678 這樣的錯誤,就給linux安裝ghostscript
yum -y install ghostscript
大致的過程就是這個樣子,有什麼有疑問的歡迎聯繫我。vx:fvalyl