ФорумПрограммированиеPHP для идиотов → Конвертация DOC в PDF, затем в JPEG на PHP, Linux

Конвертация DOC в PDF, затем в JPEG на PHP, Linux

  • chestor

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz Дек. 18, 2012, 7:03 п.п.

    Всем доброго. Ось Ubuntu 12.04, на сервере Apache2 и PHP5.

    Понадобилось конвертировать 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.

    Кто как и чем реализовывал подобные задачи?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!