web-dev-qa-db-ja.com

のサムネイルの作り方 PDF アップロードしますか?

Gravityフォーム内でPDFファイルを送信し、PDFの最初のページにJPGサムネイルを作成して表示できるようにするためのWebサイトを開発しています。作成した投稿に.

私の計画では、これを可能にする機能を持ち、カスタムフィールドにJPGリンクを追加して、投稿ページに表示できるようにすることでした。

残念ながら、その概念を理解し、Wordpress以外のサイトでPDFをJPG形式に変換するために使用していたスクリプトを使用していますが、Wordpressでこれを実装する方法はわかりません。関数の代わりにプラグイン。

誰かが私がこの概念から始めることができるどちらかの方向性を提供することができますか?

CODE: 参考のために、前回のスクリプトから得たコードの特定部分を次に示します。ただし、これは約6年前のものです。

function make_thumbs($uploadedFpId,$issueFileprefix) {
    $issuePathprefix = $_SERVER['DOCUMENT_ROOT'].'/fp/'.$issueFileprefix;
    exec('convert -colorspace RGB -density 100x100 '.$issuePathprefix.'.pdf[0] -quality 90 '.$issuePathprefix.'.jpg');
    exec('convert '.$issuePathprefix.'.jpg  -resize 100x146 '.$issuePathprefix.'_sm.jpg'); // make thumbnail
    exec('convert '.$issuePathprefix.'.jpg  -resize 500x1000 '.$issuePathprefix.'.jpg'); // make correct size of preview
}

更新: 私は次のコードを見つけました( ここで )、これは正しい方向をさらに指しているようです。キャッチは、アップロード後すぐにこれを処理する方法がまだ見当たらないし、アップロードされたファイルパスを引き込むこともできないので、それをポストカスタムフィールドに保存する必要があります。

$img = wp_get_image_editor( ‘my/temp/uploads/path/mypdf.pdf’ );
$img->resize( 50, 50, true );
$filename = $img->generate_filename( ‘thumb’, ‘wp/wp-content/uploads/thumbs/’, ‘jpg’ );
$img->save($filename, ‘image/jpeg’);
4
Andrew

まったく間違えていなければ、ファイル/ MIMEタイプのpdfは WP_image_editorクラス によってサポートされていないため、更新で指定したコードは機能しません。 wp_get_image_editor() 。ただし、アップロードされたPDFファイルからサムネイルを作成することはできます。

以下のコードは、それを行う方法の可能性についての洞察を与えてくれます。私はそれをより理解しやすくするためにすべての重要なことをコメントしました。サムネイルの作成は、wp_generate_attachment_metadatahookfunction にフックし、MIMEタイプをチェックすることにより自動化されます。アップロードされたファイル。

コード:

add_filter( 'wp_generate_attachment_metadata', 'wpse121600_create_pdf_thumbnail', 10, 2 );
function wpse121600_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 http://yousite.org/wp-content/uploads/yourfile.pdf
        $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 = 'jpg';
        //Thumbnail output as path + format
        $thumb_out = $attachment_path.'.'.$tn_format;
        //Thumbnail URL
        $thumb_url = $attachment_url.'.'.$tn_format;

        //Setup various variables
        //Assuming A4 - portrait - 1.00x1.41
        $width = '250';
        $height = '353';
        $quality = '90';
        $dpi = '300';
        $resize = $width.'x'.$height;
        $density = $dpi.'x'.$dpi;

        //For configuration/options see: http://www.imagemagick.org/script/command-line-options.php
        $a_exec = "convert -adaptive-resize $width -density $dpi -quality $quality $pdf_source $thumb_out";
        $r_exec = "convert -resize $width -density $dpi -quality $quality $pdf_source $thumb_out";
        $t_exec = "convert -thumbnail $width -density $dpi -quality $quality $pdf_source $thumb_out";
        $s_exec = "convert -scale $width $pdf_source $thumb_out";

        //Create the thumbnail with choosen option
        exec($r_exec);

        //Add thumbnail URL as metadata of pdf attachment
        $metadata['thumbnail'] = $thumb_url;

    }

    return $metadata;

}

もちろん、これはプラグインに関するすべての要望を処理するわけではありませんが、開始する必要があります。たとえば、コードは、サムネイルを作成する別の方法で使用できます-コメントで投稿したリンクを参照します。それに加えて、サムネイルをメディアライブラリに挿入するなど、いくつかの追加機能が考えられますが、それは単にOutlookを提供することです。

4
Nicolai