使用WordPress插件从pdf创建jpgs

时间:2015-07-21 09:06:03

标签: php wordpress pdf wordpress-plugin jpeg

我正在处理一个插件,该插件会从上传的pdf文件的每个页面创建jpgs。

我使用function process_pdf($results) { if( $results['type'] === 'application/pdf' ) { $filename = $results[ 'file' ]; $filename_wo_extension = basename( $filename ); $url = $results[ 'url' ]; $im = new Imagick(); $im->setResolution(300, 300); $pages = $im->getNumberImages(); for($p = 0; $p < $pages; $p++){ // http://stackoverflow.com/questions/467793/how-do-i-convert-a-pdf-document-to-a-preview-image-in-php // http://stackoverflow.com/questions/1143841/count-the-number-of-pages-in-a-pdf-in-only-php $im->readImage( $url.'['.p.']'); $im->setImageFormat('jpg'); $filename_neu = $filename_wo_extension .'_'. $p .'.jpg'; // https://codex.wordpress.org/Function_Reference/wp_insert_attachment $upload_file = wp_upload_bits($filename_neu, null, $im); if (!$upload_file['error']) { $attachment = array( 'post_mime_type' => 'image/jpeg', 'post_title' => preg_replace('/\.[^.]+$/', '', $filename_neu), 'post_content' => '', 'post_status' => 'inherit' ); $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'] ); if (!is_wp_error($attachment_id)) { require_once(ABSPATH . "wp-admin" . '/includes/image.php'); $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] ); wp_update_attachment_metadata( $attachment_id, $attachment_data ); } } } } } add_action('wp_handle_upload', 'process_pdf'); 操作并检查mime类型是否为pdf。 之后,我使用Imagick获取页数并从每个页面创建一个新的jpg。然后文件上传。

我认为Wordpress并不是从头开始支持ImageMagick所以我安装了ImageMagick Engine插件。

当我现在在Wordpress上传文件时,我发现了一个错误。我不知道究竟什么不起作用。

关于出了什么问题的任何想法?
谢谢,奥利弗

Branch on 'input'
/test/i : MAP

2 个答案:

答案 0 :(得分:3)

以下是实现此目的的代码。 必须将pdf文件上传到帖子,否则没有$post_id。 现在唯一的事情是,当点击保存时,自定义字段(图库)会被覆盖。上传pdf后未保存帖子时,图片会显示在图库中。

function process_pdf( $file ) {

    if( $file['type'] === 'application/pdf' ) {

        // Get the parent post ID, if there is one
        if( isset($_REQUEST['post_id']) ) {
            $post_id = $_REQUEST['post_id'];

            $filename = $file[ 'name' ];
            $filename_wo_extension = basename( $filename, ".pdf" );

            $im = new Imagick();
            $im->setResolution(300, 300);
            $im->readimage( $file[ 'tmp_name' ] ); 
            $pages = $im->getNumberImages();

            $attachments_array = array();

            // iterate over pages of the pdf file
            for($p = 1; $p <= $pages; $p++){
                $im->setIteratorIndex( $p - 1 );
                $im->setImageFormat('jpeg');

                $filename_neu = $filename_wo_extension .'_'. $p .'.jpg';

                // upload new image to wordpress
                // https://codex.wordpress.org/Function_Reference/wp_insert_attachment
                $upload_file = wp_upload_bits($filename_neu, null, $im);
                if (!$upload_file['error']) {

                    $attachment = array(
                        'post_mime_type' => 'image/jpeg',
                        'post_title' => preg_replace( '/\.[^.]+$/', '', $filename_neu),
                        'post_content' => '',
                        'post_status' => 'inherit'
                    );

                    $attachment_id = wp_insert_attachment( $attachment, $upload_file['file'] );

                    if (!is_wp_error( $attachment_id )) {
                        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                        $attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
                        wp_update_attachment_metadata( $attachment_id,  $attachment_data );
                        $attachments_array[] = $attachment_id;
                    }
                }
            }

            // add new images to a gallery (advanced custom fields plugin)
            // http://www.advancedcustomfields.com/resources/update_field/
            update_field( 'field_55b0a473da995', $attachments_array, $post_id );

          $im->destroy();
       }
    }

    return $file;

}

add_filter('wp_handle_upload_prefilter', 'process_pdf' );

答案 1 :(得分:1)

我知道这是一个老线程,但无论如何,我想说有一个非常好的WordPress插件处理PDF文件,使用ImageMagick或IMagik将第一页转换为图像(它让你选择你在网站上安装的内容。)

作为源代码,如果免费提供,我想这可能对任何可能正在研究这个问题的人有所帮助:

PDF图像生成器  https://wordpress.org/plugins/pdf-image-generator/