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

John Wachira 2023年6月20日
  1. PHP と Ghostscript を使用して PDF ドキュメントをプレビュー画像に変換する
  2. PHP と ImageMagick を使用して PDF ドキュメントをプレビュー画像に変換する
PHP で PDF ドキュメントをプレビュー画像に変換する

このチュートリアルでは、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 ドキュメントからプレビュー画像を作成する方法です。 どちらの方法も同様の基本機能を備えています。 あなたの選択はあなたの好みに依存します。

著者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

関連記事 - PHP PDF