Imagick не удалось прочитать файл (pdf), но смог прочитать изображения

#php #laravel

#php #laravel

Вопрос:

Я пытаюсь заставить Imagick работать, потому что я хочу конвертировать PDF в изображения. Я могу успешно открыть другие файлы, но я не могу открыть файлы PDF.

Это выдаст мне сообщение об ошибке: Не удалось прочитать файл

Кто-нибудь знает, как это решить и / или как выяснить, в чем проблема? Я пробовал разные файлы PDF, но ни один из них не удалось открыть.

  • Ubuntu 18.04
  • Lumen (новейшая версия)

Файл, очевидно, доступен для чтения и проверяется с помощью (is_file) и так далее. Все в порядке и работает, но Imagick не может открыть только файлы PDF.

 $imagick = new Imagick();
$imagick->readImage('/var/www/html/mysite.com/storage/app/files/dummy.pdf');
$imagick->writeImages('/var/www/html/mysite.com/storage/app/files/converted.pdf', false));
  

Я попытался:

$imagick = новый Imagick(‘/var/www /html/imagick/dummy.pdf’); $imagick = новый Imagick(‘dummy.pdf’);

но оба выдают мне ошибку:

  Fatal error: Uncaught ImagickException: Failed to read the file in /var/www/html/imagick/index.php:33 Stack trace: #0 /var/www/html/imagick/index.php(33): Imagick->__construct('dummy.pdf') #1 {main} thrown in /var/www/html/imagick/index.php on line 33
  

Когда я использую try catch, я получаю это:

 ImagickException Object
(
    [message:protected] => Failed to read the file
    [string:Exception:private] => 
    [code:protected] => 1
    [file:protected] => /var/www/html/imagick/index.php
    [line:protected] => 13
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [file] => /var/www/html/imagick/index.php
                    [line] => 13
                    [function] => __construct
                    [class] => Imagick
                    [type] => ->
                    [args] => Array
                        (
                            [0] => /var/www/html/imagick/dummy.pdf
                        )

                )

        )

    [previous:Exception:private] => 
)
  

Комментарии:

1. Можете ли вы попробовать $var = file_get_contents('/var/www/html/mysite.com/storage/app/files/dummy.pdf') а затем $imagick = new Imagick($var); ? Если нет, $imagick->readImageBlob($var); ?

2. К сожалению, не работает. Ошибка, которую я получаю, заключается в том, что я не могу прочитать большой двоичный объект изображения, независимо от того, какой PDF я использую.

3. Я обнаружил это… так глупо -_- Мне пришлось установить Ghost script. Вот и все! в руководстве, которое я использовал, ничего не говорилось о Ghost script, равно как и в сообщении об ошибке. В любом случае, это было решение 😉 спасибо за помощь!!!

4. @Ometecuthli да, мне это тоже помогло. Возможно, вы захотите опубликовать это как ответ, на самом деле! Я бы с радостью поддержал 🙂

Ответ №1:

Сначала проверьте, может ли PHP вообще прочитать файл. Возможно, у этого файла также есть другие разрешения. file_get_contents возвращает строку, проверьте ее длину.

 $Content = file_get_contents('/var/www/html/mysite.com/storage/app/files/dummy.pdf');
if (strlen($Content) < 10) {
    // content is not readable.
}
  

Это многостраничный PDF?
Я всегда ставлю [0] в конце, чтобы загрузить только первую страницу.

 $imagick->readImage('/var/www/html/mysite.com/storage/app/files/dummy.pdf'."[0]");
  

Комментарии:

1. Почему мой ответ был отклонен? Было бы действительно полезно для меня и для других пользователей, если бы вы написали комментарий. ПОЧЕМУ — в чем причина, почему мой ответ неправильный.