LaravelやバニラPHPでPDFファイルを画像に変換する方法を紹介します。php-imagickを用いた方法を紹介していきます。
php-imagickのインストール
PHPでPDFを扱うための拡張モジュール「php-imagick」をインストールします。
sudo apt install php-imagick
apacheを再起動します。
sudo systemctl restart apache2
モジュールがロードされているか確認します。
php -m | grep imagick
/etc/ImageMagick-6/policy.xmlを編集し、PDFへの書き込みを可能とします。
ファイルの下の方にいくと、
<policymap>
<!-- <policy domain="system" name="shred" value="2"/> -->
<!-- <policy domain="system" name="precision" value="6"/> -->
<!-- <policy domain="system" name="memory-map" value="anonymous"/> -->
<!-- <policy domain="system" name="max-memory-request" value="256MiB"/> -->
<!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
<policy domain="resource" name="memory" value="256MiB"/>
<policy domain="resource" name="map" value="512MiB"/>
・・・以下略
という箇所があるので、
<policy domain="coder" rights="none" pattern="PDF" />
の部分を
<policy domain="coder" rights=read|write" pattern="PDF" />
に変更します。
すべてのページを画像に変換する
以下のコードでPDFファイルを画像に変換できます。
$imagick = new Imagick();
$imagick->readImage('myfile.pdf');
$imagick->writeImages('converted.jpg', false);
これだけで全ページ画像に変換されます。
ページを指定して、画像に変換する
ページを指定するには、
$imagick->readImage('myfile.pdf[0]');
のようにファイル名最後に[]でページ番号を指定します。
解像度を指定する
setResolutionで画像の解像度を指定できます。
$imagick->setResolution(150, 150);
まとめ
ほかにもたくさんの関数が用意されています。
PHP: ImageMagick - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites i...
今回はLaravelでの方法ということで記事にしていますが、php-imagickはLaravelに依存したライブラリではないので、バニラPHPでも使用できます。
このほかLaravelでは、spatie/pdf-to-imageをつかった方法もあります。しかし、現時点ではPHP7までしか対応していないため、最新の環境では動作しない可能性がある点に注意が必要です。
GitHub - spatie/pdf-to-image: Convert a pdf to an image
Convert a pdf to an image. Contribute to spatie/pdf-to-image development by creating an account on GitHub.
参考
https://www.positronx.io/laravel-convert-pdf-document-to-image-tutorial/
コメント