#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. Почему мой ответ был отклонен? Было бы действительно полезно для меня и для других пользователей, если бы вы написали комментарий. ПОЧЕМУ — в чем причина, почему мой ответ неправильный.