ImageMagick/Imagick конвертирует PDF в JPG с использованием собственного PHP API
Я пытаюсь преобразовать PDF файлы в PNG. Он отлично работает с командной строкой (у меня установлен GhostScript 8.64). Но из PHP Im возникает проблема:
код:
$im = new Imagick($pdf_file); // this is where it throws the exception below
выход:
Fatal error: Uncaught exception ‘ImagickException’ with message ‘Postscript delegate failed `23_1235606503.pdf’: No such file or directory @ pdf.c/ReadPDFImage/612′ in get_thumbnail.php:93
Stack trace:
\#0 get_thumbnail.php(93): Imagick->__construct(’…’)
и т.д.. и др.
Я не уверен, что я делаю неправильно здесь, но я подозреваю, что это как-то связано с моей конфигурацией сервера. Я бегу:
Apache 2.2.11
PHP 5.2.8
ImageMagick 6.4.8-9
GhostScript 8.64
Ответы
Ответ 1
Наконец понял это. Исполняемый файл GhostScript (gs
) не был в пути к среде Apache. Это было в /usr/local/bin
. Хотя я пробовал несколько способов добавить /usr/local/bin
к пути, мне это не удалось. Я положил символическую ссылку для gs
в /usr/bin directory
. Теперь все работает отлично.
Ответ 2
У меня нет "репутации" в Stackoverflow, чтобы добавить комментарий выше, но есть дополнительный шаг, который мне пришлось выполнить, чтобы заставить это работать на моем Mac с последним обновлением Sierra.
При вводе команды:
sudo ln -s /usr/local/bin/gs /usr/bin/gs
На Mac вы можете получить сообщение об ошибке "Операция не разрешена".
По-видимому, Apple внесла изменения, что каталог "bin" не редактируется, если вы не отключите SIP (System Integrity Protection).
Итак, вот шаги для этого:
- Перезагрузите Mac в режим Recorvery, перезагрузив компьютер и удерживая "Command + R", пока на вашем экране не появится логотип Apple.
- Нажмите "Утилиты" > "Терминал"
- В окне терминала введите
crutil disable
и нажмите "Enter"
- Перезагрузите Mac.
Я только что прошел эти шаги, и теперь мой Ghostscript отлично работает, и я успешно конвертировал PDF в JPG.
Ответ 3
Я успешно это делаю. Вот код, который я использую для преобразования. Мы используем это решение коммерчески. Я знаю, что этот вопрос существует некоторое время, но он все равно может помочь вам.
//Convert PDF contract to image using ImageMagik and Ghostscript
// NOTE: This will need to be change if running on Linux
$source = $appDir."\\".$clientID."\\".$clientID.".pdf";
$dest = $appDir."\\".$clientID."\\".$clientID.".jpg";
//print("c:\\IM\\convert.exe $source $dest ");
exec("c:\\IM\\convert.exe $source $dest ");