Intereting Posts
отображение результата запроса php mysql с отношением один к другому Удаление видео из списка воспроизведения с API данных YouTube v3 Как передать значения между страницами PHP для MVC? Корень документа параллельного пути Apache PHP Найти все (несколько) уникальные комбинации массива получать значения массива с помощью ключевого пути рекурсивной функции php конвертировать url в ссылки из строки, за исключением случаев, когда они находятся в атрибуте тега html Как эта функция автозагрузки? Разделите все, начиная от строки, кроме числа и знаменателя валюты Нужно руководство для начала с Zend ACL Вставка html-кода в таблицу mysql Как определить, какой флажок установлен? У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' '') 'в строке 2 Оптимизируйте этот SQL-запрос Чтение дочерних узлов с помощью XMLReader

Сохранение каждой страницы PDF в изображение с помощью Imagick

У меня есть следующая функция php ниже, которая преобразует локальный файл PDF в изображения. Короче говоря, я хочу, чтобы каждая страница PDF была преобразована в отдельный образ.

Функция преобразует PDF в изображение, но только на последнюю страницу. Я хочу, чтобы каждая страница PDF была преобразована в изображение и пронумерована. Не только последняя страница PDF.

В настоящее время эта функция преобразует последнюю страницу example.pdf в example-0.jpg . Проблема, я уверен, лежит внутри метода for . Что мне не хватает?

 $file_name = 'example.pdf'; // using just for this example, I pull $file_name from another function function _create_preview_images($file_name) { // Strip document extension $file_name = basename($file_name, '.pdf'); // Convert this document // Each page to single image $img = new imagick('uploads/'.$file_name.'.pdf'); // Set background color and flatten // Prevents black background on objects with transparency $img->setImageBackgroundColor('white'); $img = $img->flattenImages(); // Set image resolution // Determine num of pages $img->setResolution(300,300); $num_pages = $img->getNumberImages(); // Compress Image Quality $img->setImageCompressionQuality(100); // Convert PDF pages to images for($i = 0;$i < $num_pages; $i++) { // Set iterator postion $img->setIteratorIndex($i); // Set image format $img->setImageFormat('jpeg'); // Write Images to temp 'upload' folder $img->writeImage('uploads/'.$file_name.'-'.$i.'.jpg'); } $img->destroy(); } 

Related of "Сохранение каждой страницы PDF в изображение с помощью Imagick"

Кажется, что большая часть моего кода была правильной. Проблема была в том, что я использовал $img->flattenImages(); неправильно. Это merges последовательность изображений в одно изображение. Подобно тому, как Photoshop выравнивает все видимые слои в изображении при экспорте jpg .

Я удалил вышеуказанную строку, и отдельные файлы были написаны так, как ожидалось.

  /* convert pdf file to list image files */ if($_FILES['file_any']['type']=='application/pdf'){ $file_name = str_replace(substr($url,0,strpos($url,$_FILES['file_any']['name'])),'',$url); $basename = substr($file_name,0,strpos($file_name,'.')); $abcd = wp_upload_dir(); $delpath = $abcd['path']; $savepath = $abcd['url']; $dirpath = substr($savepath,(strpos($savepath,'/upl')+1)); $file_name = basename($file_name, '.pdf'); $img = new imagick($delpath.'/'.$file_name.'.pdf'); $img->setImageBackgroundColor('white'); $img->setResolution(300,300); $num_pages = $img->getNumberImages(); $img->setImageCompressionQuality(100); $imageurl = NULL; $imagedelurl = NULL; for($i = 0;$i < $num_pages; $i++) { $imageurl[]=$savepath.'/'.$basename.'-'.$i.'.jpg'; $imagedelurl[] = $delpath.'/'.$basename.'-'.$i.'.jpg'; // Set iterator postion $img->setIteratorIndex($i); // Set image format $img->setImageFormat('jpeg'); // Write Images to temp 'upload' folder $img->writeImage($delpath.'/'.$file_name.'-'.$i.'.jpg'); } $img->destroy(); } 

Существует гораздо более простой способ без цикла, просто используйте $img->writeImages($filename,false); и он сделает файл на PDF-страницу. Как вы сказали, если вы сначала flatten изображение, он сохранит только 1 страницу.

сначала установить

ImageMagick

в вашей системе или сервере, а затем создайте

pdfimage

папку и поместите файл PDF в эту папку, затем запустите код и загрузите его файл

 <?php $file_name = $_FILES['pdfupload']['name']; // using just for this example, I pull $file_name from another function //echo strpos($file_name,'.pdf'); $basename = substr($file_name,0,strpos($file_name,'.')); //echo $_FILES['pdfupload']['type']; //if (isset($_POST['submit'])){ if($_FILES['pdfupload']['type']=='application/pdf'){ // Strip document extension $file_name = basename($file_name, '.pdf'); // Convert this document // Each page to single image $img = new imagick('pdfimage/'.$file_name.'.pdf'); // Set background color and flatten // Prevents black background on objects with transparency $img->setImageBackgroundColor('white'); //$img = $img->flattenImages(); // Set image resolution // Determine num of pages $img->setResolution(300,300); $num_pages = $img->getNumberImages(); // Compress Image Quality $img->setImageCompressionQuality(100); $images = NULL; // Convert PDF pages to images for($i = 0;$i < $num_pages; $i++) { $images[]=$basename.'-'.$i.'.jpg'; // Set iterator postion $img->setIteratorIndex($i); // Set image format $img->setImageFormat('jpeg'); // Write Images to temp 'upload' folder $img->writeImage('pdfimage/'.$file_name.'-'.$i.'.jpg'); } echo "<pre>"; print_r($images); $img->destroy(); } //} ?>