LaravelでPDFから画像を生成するには?

laravel Laravel

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

今回は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.

参考

Laravel 10 How-To: Convert PDF Document to Image Tutorial
Find out the profound technique convert PDF to image in laravel application using the PHP imagick extension.

コメント

タイトルとURLをコピーしました