2015-07-21 2 views
2

Я работаю над плагином, который создает jpg с каждой страницы загруженного pdf-файла.Создайте jpg из pdf с плагином WordPress

Я использую действие wp_handle_upload и проверяю, является ли тип mime pdf. После этого я использую Imagick, чтобы получить количество страниц и создать новый jpg с каждой страницы. Затем файл загружается.

Я думаю, что Wordpress не поддерживает ImageMagick с нуля, поэтому я установил плагин ImageMagick Engine.

Когда я сейчас загружаю файл в Wordpress, я просто получаю сообщение об ошибке. Я не знаю, что именно не работает.

Любое представление о том, что происходит не так?
Спасибо, Оливер

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'); 

ответ

2

Вот код для достижения этой цели. Файл 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

Я знаю, что это старая нить, но в любом случае, я хотел бы сказать, что есть очень хороший WordPress плагин, который имеет дело с PDF-файлами, преобразованием первой страницы в изображение, используя либо ImageMagick или IMagik (это позволит вам выбрать то, что вы установили на своем сайте).

В качестве исходного кода, если в свободном доступе, я предполагаю, что это может иметь некоторую помощь для тех, кто может исследовать по этому вопросу:

PDF IMAGE ГЕНЕРАТОР https://wordpress.org/plugins/pdf-image-generator/

Смежные вопросы