サポート » 使い方全般 » GhostScriptのないサーバでPDFのサムネイルを生成したい

  • 解決済 mintcode

    (@mintcode)


    「メディアのアップロード」でPDFファイルを追加する際に、その1ページ目をサムネイルとして生成したいです。
    プラグインはいろいろありますが、使用するサーバにGhostScriptが入っていないので、使えるものが見つかりません。
    いろいろと検索して切りはりして、下記のコードをfunctions.phpに追記してみました。

    /* PDFからサムネイルを生成
    --------------------------------------------------------- */
    add_filter( 'wp_generate_attachment_metadata', 'create_pdf_thumbnail', 10, 2 );
    function create_pdf_thumbnail( $metadata, $attachment_id ) {
    
        //Get the attachment/post object
        $attachment_obj = get_post( $attachment_id );
    
        //Check for mime type pdf
        if( 'application/pdf' == get_post_mime_type( $attachment_obj ) ) {
    
            //Get attachment URL
            $attachment_url = wp_get_attachment_url($attachment_id);
            //Get attachment path /some/folder/on/server/wp-content/uploads/yourfile.pdf
            $attachment_path = get_attached_file($attachment_id );
    
            //By adding [0] the first page gets selected, important because otherwise multi paged files wont't work
            $pdf_source = $attachment_path.'[0]';
    
            //Thumbnail format
            $tn_format = 'png';
            //Thumbnail output as path + format
            $thumb_out = $attachment_path.'.'.$tn_format;
            //Thumbnail URL
            $thumb_url = $attachment_url.'.'.$tn_format;
    
            //Setup various variables
            $width = '300';
            $height = '300';
            $quality = '90';
            $dpi = '72';
            $resize = $width.'x'.$height;
            $density = $dpi.'x'.$dpi;
    
            //Create the thumbnail
            passthru("/usr/bin/convert -resize $width -density $dpi -quality $quality $pdf_source $thumb_out");
        }
    }

    テストサーバ(GhostScriptが入っている)では意図通り、
    PDFファイルと同じディレクトリにサムネイルのjpgが生成されるのですが、
    本番サーバ(GhostScriptが入っていない)では何も起こりません。

    FITWebハイパーサーバシェアードブロンズプラン
    PHPバージョン5.3.3
    ImageMagick(6.5.4.7)

    です。

    質問は、

    1. そもそもGhostScriptなしでPDFからサムネイルを生成できるのかどうか。
    2. 私の書いたコードにはGhostScriptが必要な部分があるのかどうか。
    3. 拡張モジュールimagickを使ってPDFのサムネイルを生成することにもトライしてみましたが、下記のように書くと、テストでも本番でも Fatal error: Class ‘Imagick’ not found in ~ と表示されます。これは、Imagick拡張モジュールはインストールされていないという理解でよいでしょうか?それとも、何か設定が間違っているでしょうか?

    $im = new Imagick($file_url.'[0]');

    PHPがあまり分かっていないため、要領を得ない部分があるかと思いますが、よろしくお願いいたします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • やはり、GhostScriptなしではちょっと私にはできなかったので、
    外部サービスで解決しました。

    http://capture.heartrails.com

    functions.phpに

    function capture_heartrails_show_pdf_thumbnail( $pdf_file_id ){
    	$pdf_file_url = wp_get_attachment_url( $pdf_file_id );
    	$str = '<img style="border: 1px solid #ccc;" src="http://capture.heartrails.com/122x173/shorten?'.$pdf_file_url.'">';
    	echo $str;
    }

    と関数を作っておいて、テンプレート側でこれを呼び出してます。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「GhostScriptのないサーバでPDFのサムネイルを生成したい」には新たに返信することはできません。