web-dev-qa-db-fra.com

Comment créer des vignettes pour PDF uploads?

Je développe un site Web qui doit permettre aux utilisateurs, dans Gravity Forms, de soumettre un fichier PDF et de créer une miniature JPG de la première page du PDF affichée. dans le post créé.

Mon plan était d’avoir une fonction qui permettrait cela, et d’ajouter le lien JPG à un champ personnalisé, afin qu’il puisse ensuite être affiché sur la page de publication.

Malheureusement, bien que je comprenne le concept et que j’utilise un script pour convertir des PDF au format JPG sur un site autre que Wordpress, je ne sais pas comment l’implémenter dans Wordpress, ni s’il est préférable de le créer en tant que fichier. plugin au lieu d'une fonction.

Quelqu'un peut-il fournir une direction ou je peux commencer avec ce concept?

CODE: Pour référence, voici la partie spécifique du code que j'avais du script précédent, mais elle a environ 6 ans:

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: J'ai trouvé le code suivant ( ici ), qui semble aller plus loin dans la bonne direction. Le problème, c'est que je ne vois toujours pas comment gérer cela juste après le téléchargement et que je récupère également le chemin du fichier téléchargé. Il me faut ensuite l'enregistrer dans le champ de publication personnalisé:

$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

Si je ne me trompe pas totalement, le code que vous avez fourni dans votre mise à jour ne fonctionnera pas, car le type de fichier/mime pdf n'est pas pris en charge par la classe WP_image_editor appelée par wp_get_image_editor () . La création d'une miniature à partir d'un fichier PDF téléchargé peut toutefois être réalisée.

Le code ci-dessous vous donne un aperçu de la possibilité de le faire. J'ai commenté tous les éléments importants pour le rendre plus compréhensible pour vous. La création de vignettes est automatisée en ajoutant dans le wp_generate_attachment_metadata le hook à la fonction et en vérifiant le type mime du fichier téléchargé.

Code:

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;

}

Bien entendu, cela ne répond pas à tous vos souhaits concernant votre plugin, mais cela devrait vous aider à démarrer. Le code pourrait, par exemple, être utilisé avec une autre méthode de création des vignettes - en référence aux liens que j'ai postés dans le commentaire. En outre, plusieurs fonctionnalités supplémentaires sont imaginables, telles que l'insertion de miniatures dans la bibliothèque multimédia, mais cela ne sert qu'à vous fournir un Outlook.

4
Nicolai