Понадобилось конвертировать DOC файлы в PDF на лету. Смотрел, что использовать - остановился на unoconv от libreoffice. В дистребутивах лежит версия 0.4, которая постоянно плюется разными ошибками, в духе:
Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Error: Unable to connect or start own listener. Aborting
или же:
unoconv: UnoException during conversion in : Unsupported URL
В итоге, поставил c https://github.com/dagwieers/unoconv версию 0.6 .
Соответственно, распаковал в диру и там make install.
Поставил libreoffice, к которому в Ubuntu, кстати, отсутствует –headless пакет или я не понял, под каким он названием в apt-get, но его там нет.
Соответственно, добавил пользователя www-data в sudo visudo:
www-data ALL=(ALL) NOPASSWD: /usr/bin/unoconv
Теперь радостно консолью смог от рута без пароля, то есть, ушел от проблемы глюка с созданием конфиговской директории, которая создалась рутами libreoffice :
sudo -u www-data unoconv -v -f pdf /filepath/file.name
И радостно наблюдаю в той же директории файл PDF. То же от веб-сервера,
exec("sudo -u www-data unoconv -v -f pdf /filepath/file.name");
Дальше - больше, нужно из PDF в JPEG, но вот данным конвертером плюется ошибкой:
unoconv: UnoException during export phase:
Unable to store document to file:///var/www/*********.jpg (ErrCode 3088)
Properties: ((com.sun.star.beans.PropertyValue){ Name = (string)"FilterName", Handle = (long)0x0, Value = (any){ (string)"draw_jpg_Export" }, State = (com.sun.star.beans.PropertyState)DIRECT_VALUE }, (com.sun.star.beans.PropertyValue){ Name = (string)"OutputStream", Handle = (long)0x0, Value = (any){ (com.sun.star.uno.XInterface)0x98d6c6c{, supportedInterfaces={com.sun.star.lang.XTypeProvider,com.sun.star.io.XOutputStream}} }, State = (com.sun.star.beans.PropertyState)DIRECT_VALUE }, (com.sun.star.beans.PropertyValue){ Name = (string)"Overwrite", Handle = (long)0x0, Value = (any){ (boolean)true }, State = (com.sun.star.beans.PropertyState)DIRECT_VALUE })
Тут уже копаться не стал, но функционал не сильно порадовал. Тем не менее продолжил:
gs -dNOPAUSE -dPDFFitPage -dFIXEDMEDIA -sDEFAULTPAPERSIZE=a4 -dSAFER -sDEVICE=jpeg -r144 -sOutputFile=/home/www/[здесь имя файла по маске].jpg /home/www/[здесь имя файла].pdf);
GhostScript конвертировал PDF в JPEG и разложил его на отдельные файлы согласно страницам.
Тут уже оказалась нужна утилита montage:
montage -border 2 -geometry +2+2 -tile 1x0 /home/www/[здесь имя файла по маске].jpg /home/www/[здесь имя файла].jpg
Которая -tile 1x0 - склеила в один больной столб вертикально все картинки.
На выходе получил три сгенерированных файла в разных форматах - DOC,PDF,JPEG.
Кто как и чем реализовывал подобные задачи?