HOWTO · PHP

PHP で PDF ドキュメントをプレビュー画像に変換する

このチュートリアルでは、PHP で PDF ドキュメントを一連のプレビュー画像に変換するために使用できる 2つの方法について説明します。

このページの内容

このチュートリアルでは、PHP で PDF ドキュメントを一連のプレビュー画像に変換するために使用できる 2つの方法について説明します。

プレビューは、画像のコンテンツをコピーして貼り付けることができないため、コンテンツにセキュリティ層を追加します。 それらは、ここでは説明しませんが、その他の機能も提供します。

PDF ドキュメントをプレビュー画像に変換する最も簡単な方法は、サードパーティのライブラリを利用することです。 これらは:

  1. ゴーストスクリプト
  2. イメージマジック

PHP と Ghostscript を使用して PDF ドキュメントをプレビュー画像に変換する

このコマンドライン ユーティリティは、Windows、Linux、および Mac で使用できます。 以下の手順に従って、PDF ドキュメントをプレビュー イメージに変換します。

  1. インストールを開始するには、Ghostscript の公式 Web サイトにアクセスし、実行可能ファイルをダウンロードして、セットアップ手順に従います。

  2. 以下のコードを実行して、インストールを確認します。

    $gs --version
    
  3. PDF ファイルのディレクトリで、以下のコマンドを実行します。

    $gs -dSAFER -dBATCH -sDEVICE=jpeg \
    -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
    -dFirstPage=1 -dLastPage=1 -r300 \
    -sOutputFile=preview.jpg input.pdf
    
  4. 上記のコマンドは、ドキュメントの開始ページの画像を作成します。 以下に示すように、PHP でコマンドを使用するために exec() 関数を呼び出します。

    <?php
    exec( "ls -l", $output_str, $return_val );
    foreach ( $output_str as $line ) {
        echo $line . "\n";
    }
    ?>
    

    上記のコードは、すべてのディレクトリとファイルをコンソールにロードします。 これで、PHP コードを使用して Ghostscript コマンドを実行できるようになりました。

  5. 使用した PHP スクリプトは次のとおりです。

    <?php
    
    function my_pdf ( $file ) {
        $file_info = file_get_contents( $file );
    
        if ( preg_match( "/^%PDF-[0-1]\.[0-9]+/", $file_info ) ) {
            return true;
        }
        else {
            return false;
        }
    }
    function our_preview ( $file ) {
        $our_format = "png";
        $prvw_page = "1";
        $resolution = "300";
        $our_file = "prvw.jpg";
    
        $command  = "gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=" . $our_format . " ";
        $command .= "-dTextAlphaBits=" . " -dGraphicsAlphaBits=" . . " ";
        $command .= "-dFirstPage=" . $prvw_page . " -dLastPage=" . $prvw_page . " ";
        $command .= "-r" . $resolution . " ";
        $command .= "-sOutputFile=" . $our_file . " '" . $file . "'";
        echo "Running command...\n";
        exec( $command, $com_output, $ret_val );
        foreach( $com_output as $line ) {
            echo $line . "\n";
        }
        if ( !$ret_val ) {
            echo "Preview created !!\n";
        }
        else {
            echo "Error while creating.\n";
        }
    }
    function __main__() {
        global $arg;
        $inp_file = $arg[1];
    
        if ( my_pdf( $inp_file ) ) {
            // Preview for the pdf
            create_preview( $inp_file );
        }
        else {
            echo "The  file " . $inp_file . " is not a valid PDF document.\n";
        }
    }
    __main__();
    ?>
    

    コードの実行は _main_() 関数で始まり、コマンド ラインで PDF ファイルを取得してその有効性を検証します。 ファイルが有効な場合、PHP は Ghostscript コマンドを実行します。

    出力:

    $ php pdf_preview.php input.pdf
    Executing command...
    GPL Ghostscript 9.22 (2022-08-05)
    Copyright (C) 2022 Artifex Software, Inc.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Processing pages 1 through 1.
    Page 1
    Preview created !!
    

PHP と ImageMagick を使用して PDF ドキュメントをプレビュー画像に変換する

  1. まず、すべての ImageMagick バイナリをシステムにインストールします。 以下のコマンドを実行して、ImageMagick の依存関係をインストールします。

    $sudo dnf install gcc php-devel php-pear
    
  2. 以下のコマンドを実行して、ImageMagick をインストールします。

    $ sudo dnf install ImageMagick ImageMagick-devel
    
  3. 次に、PHP ラッパー クラスをインストールしましょう。

    $ sudo pecl install imagick
    $ sudo bash -c "echo "extension=imagick.so" > /etc/php.d/imagick.ini"
    
  4. LAMP サーバーで使用している場合は、Apache ウェブサーバーを再起動する必要があります。

    $ sudo service httpd restart
    
  5. この時点で、必要なものはすべて揃っています。 以前の PHP スクリプトを使用して、create_preview() 関数を編集できるようになりました。

    以下のコードを使用します。

    function create_preview ( $file ) {
        $output_format = "jpeg";
        $preview_page = "1";
        $resolution = "300";
        $output_file = "imagick_preview.jpg";
    
        echo "Fetching preview...\n";
        $img_data = new Imagick();
        $img_data->setResolution( $resolution, $resolution );
        $img_data->readImage( $file . "[" . ($preview_page - 1) . "]" );
        $img_data->setImageFormat( $output_format );
    
        file_put_contents( $output_file, $img_data, FILE_USE_INCLUDE_PATH );
    }
    

    出力:

    $ php pdf_preview.php input.pdf
    Fetching preview...
    

これが、PHP で PDF ドキュメントからプレビュー画像を作成する方法です。 どちらの方法も同様の基本機能を備えています。 あなたの選択はあなたの好みに依存します。