it-swarm.com.de

Wie erstelle ich Thumbnails für PDF Uploads?

Ich entwickle eine Website, auf der Benutzer in Gravity Forms eine PDF -Datei übermitteln und eine JPG-Miniaturansicht der ersten Seite der PDF erstellen können, die dann angezeigt wird in dem erstellten Beitrag.

Mein Plan war es, eine Funktion zu haben, die dies ermöglicht, und den JPG-Link einem benutzerdefinierten Feld hinzuzufügen, damit er dann auf der Beitragsseite angezeigt werden kann.

Obwohl ich das Konzept verstehe und ein Skript habe, mit dem ich PDFs in einer Nicht-Wordpress-Site in das JPG-Format konvertiert habe, bin ich mir leider nicht sicher, wie ich dies in Wordpress implementieren soll oder ob es besser ist, dies als zu erstellen Plugin anstelle einer Funktion.

Kann jemand eine Richtung geben, in der ich mit diesem Konzept beginnen kann?

CODE: Als Referenz ist hier der spezifische Teil des Codes, den ich aus dem vorherigen Scripting hatte, aber er ist ungefähr 6 Jahre alt:

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: Ich habe den folgenden Code gefunden ( genau hier ), der weiter in die richtige Richtung zu weisen scheint. Der Haken ist, dass ich nach dem Hochladen immer noch nicht weiß, wie ich damit umgehen soll, und auch den hochgeladenen Dateipfad einziehe. Dann muss ich ihn immer noch im benutzerdefinierten Feld "Post" speichern:

$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

Wenn ich mich nicht völlig irre, funktioniert der Code, den Sie bei Ihrem Update angegeben haben, nicht, da der Datei-/MIME-Typ pdf nicht von der Klasse WP_image_editor unterstützt wird, die von wp_get_image_editor () aufgerufen wird. Das Erstellen eines Thumbnails aus einer hochgeladenen PDF-Datei ist jedoch möglich.

Der folgende Code gibt Ihnen einen Einblick in eine Möglichkeit, wie Sie dies tun können. Ich habe alle wichtigen Dinge kommentiert, um es für Sie besser verständlich zu machen. Die Erstellung der Thumbnails wird automatisiert, indem Sie den Hook für die Funktion in den wp_generate_attachment_metadata einbinden und nach dem MIME-Typ der hochgeladenen Datei suchen.

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;

}

Dies berücksichtigt natürlich nicht alle Ihre Wünsche in Bezug auf Ihr Plugin, aber es sollte Ihnen den Einstieg erleichtern. Der Code könnte zum Beispiel mit einer anderen Methode zum Erstellen der Miniaturansichten verwendet werden - unter Bezugnahme auf die Links, die ich im Kommentar gepostet habe. Darüber hinaus sind verschiedene zusätzliche Funktionen denkbar, wie das Einfügen der Miniaturbilder in die Medienbibliothek, die Ihnen jedoch nur einen Ausblick geben sollen.

4
Nicolai