¿Cómo crear miniaturas para subir archivos PDF?

4

Estoy desarrollando un sitio web que debe permitir a los usuarios, dentro de Gravity Forms, enviar un archivo PDF y tener una miniatura JPG creada de la primera página del PDF que luego se muestra en la publicación creada.

Mi plan era tener una función que permitiera esto, y agregar el enlace JPG a un campo personalizado, para que luego se pueda mostrar en la página de publicación.

Desafortunadamente, aunque entiendo el concepto y tengo un script que solía usar para convertir archivos PDF a formato JPG en un sitio que no es de Wordpress, no estoy seguro de cómo implementar esto en Wordpress, o si es mejor crearlo. Esto como un complemento en lugar de una función.

¿Puede alguien proporcionar alguna dirección donde pueda comenzar con este concepto?

CÓDIGO: Para referencia, aquí está la parte específica del código que tenía del script anterior, pero tiene alrededor de 6 años:

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
}

ACTUALIZACIÓN: Encontré el siguiente código ( aquí ), que parece apuntar más hacia el dirección correcta. El problema es que todavía no veo cómo manejar esto justo después de la carga, y también obtengo la ruta del archivo cargado, y luego todavía tengo que guardarlo en el campo personalizado posterior:

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

1 respuesta

3

Si no estoy totalmente equivocado, el código que proporcionó en su actualización no funcionará, porque el archivo / mime tipo pdf no es compatible con WP_image_editor class llamada por wp_get_image_editor () . Sin embargo, se puede lograr crear una miniatura de un archivo pdf cargado.

El código a continuación te da una idea de cómo hacerlo, comenté todas las cosas importantes para que sea más comprensible para ti. La creación de miniaturas se automatiza al enlazar con wp_generate_attachment_metadata the enganche a la función y verifica el tipo mimo del archivo cargado.

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;

}

Esto, por supuesto, no se ocupa de todos tus deseos con respecto a tu complemento, pero debería ayudarte a comenzar. El código podría, por ejemplo, usarse con otro método de creación de miniaturas, refiriéndose a los enlaces que publiqué en el comentario. Además, se pueden imaginar varias funciones adicionales, como insertar las miniaturas en la biblioteca de medios, pero eso es solo para darle una perspectiva.

    
respondido por el Nicolai 08.11.2013 - 03:23

Lea otras preguntas en las etiquetas