Como criar miniaturas para uploads de PDF?

4

Estou desenvolvendo um site que precisa permitir que os usuários, no Gravity Forms, enviem um arquivo PDF e criem uma miniatura JPG da primeira página do PDF que será exibida na postagem criada.

Meu plano era ter uma função que permitisse isso e adicionar o link JPG a um campo personalizado, para que ele pudesse ser exibido na página do post.

Infelizmente, embora eu tenha entendido o conceito e tenha usado um script para converter PDFs em formato JPG em um site que não seja o Wordpress, não sei como implementar isso no Wordpress ou se é melhor criá-lo isso como um plugin em vez de uma função.

Alguém pode fornecer alguma orientação ou onde eu posso começar com esse conceito?

CÓDIGO: Para referência, aqui está a parte específica do código que eu tinha do script anterior, mas tem cerca de 6 anos:

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
}

UPDATE: Eu encontrei o seguinte código ( aqui ), que parece apontar mais para o direção correta. O problema é que ainda não vejo como lidar com isso logo após o upload, além de puxar o caminho do arquivo enviado, e ainda preciso salvá-lo no campo personalizado de postagem:

$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’);
    
por Andrew 07.11.2013 / 18:43

1 resposta

3

Se eu não estiver totalmente enganado, o código que você deu na sua atualização não funcionará, porque o pdf do tipo arquivo / mime não é suportado pelo Classe WP_image_editor chamado por wp_get_image_editor () . Criando uma miniatura de um arquivo pdf carregado pode ser alcançado embora.

Abaixo do código, você tem uma ideia de como fazer isso, eu comentei todas as coisas importantes para torná-lo mais compreensível para você. A criação de miniaturas é automatizada conectando-se a wp_generate_attachment_metadata the gancho para a função e verificação do tipo mime do arquivo enviado.

Código:

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;

}

Isso, obviamente, não cuida de todos os seus desejos em relação ao seu plugin, mas deve começar. O código poderia, por exemplo, ser usado com outro método de criar as miniaturas - referindo-se aos links que eu postei no comentário. Além disso, vários recursos adicionais são imagináveis, como inserir as miniaturas na biblioteca de mídia, mas isso é só para dar a você uma perspectiva.

    
por Nicolai 08.11.2013 / 03:23