Ru-Board.club
← Вернуться в раздел «Программы»

» LibreOffice как пакетный конвертер (soffice); unoconv

Автор: alexeySTP
Дата сообщения: 07.06.2013 13:14
unoconv - скрипт на python, работающий с LibreOffice и предназначенный для конверсии документов LibreOffice, MS Office, pdf и многого другого в не-интерактивном режиме. Создан для Linux, но, по уверению автора, может работать и на Windows с установленным LibreOffice 3.4-3.6.
Однако, лично у меня запустить его не получилось, хотя все скудные рекомендации автора (в файле README, прилагавшегося к пакету) были соблюдены.
Хронически получаю ошибку:
unoconv: Cannot find suitable office installation on your system. И далее по тексту. Пробовал libreOffice от 3.5.2 до 4.0.3, unoconv 0.5 и 0.6.
UNO_PATH установлен как C:\Program Files (x86)\LibreOffice 3.x\program в зависимости от версии офиса.
Возможно, нужно запустить s0ffice.exe в headless mode - тогда вопрос, как это сделать. Если нет, объясните в чем фокус.
На Debian Linux с пакетом libreoffice-headless работает без вопросов.
Автор: ASE_DAG
Дата сообщения: 08.06.2013 22:15
alexeySTP
> запустить ... в headless mode - тогда вопрос, как это сделать.

$ soffice --headless --convert-to txt:Text mydoc.odt

здесь значение ключа convert-to формируется так: txt — расширение целевого файла, Text — формат, в который конвертировать.
Справки по допустимым значения я не видел, но их можно посмотреть в файле фильтра из этого перечня, там где, например, <node oor:name="Text" oor:op="replace">. В принципе, его можно и не указывать:
$ soffice --headless --convert-to pdf mydoc.odt
но мнение Либрофиса на тот формат, который соответствует расширению, с вашим может не совпасть.
Автор: ASE_DAG
Дата сообщения: 12.06.2013 00:38
alexeySTP
Как успехи?
Автор: alexeySTP
Дата сообщения: 01.07.2013 09:48
Честно говоря, никак.
Такое ощущение, что скрипт что-то не находит.
Т.е. не запускается в принципе, даже чтобы выдать help.
Автор: Alex_Piggy
Дата сообщения: 02.07.2013 07:48
Добрый день, alexeySTP
В Vista x86 с LibreOffice 3.6.6.2 (ID сборки: f969faf) (LibO_3.6.6_Win_x86_install_multi.msi) unoconv 0.6 тоже работает без проблем.
Проверял батником. Пример - unoconv pdf "C:\Program Files\LibreOffice 3.6\readmes\readme_ru.txt"

Код:
set "office_prog=C:\Program Files\LibreOffice 3.6\program\"
set "UNO_PATH=%office_prog%..\"
"%office_prog%python.exe" "%office_prog%unoconv" -f %1 "%~f2"
Автор: alexeySTP
Дата сообщения: 13.07.2013 15:50
Предположение оказалось абсолютно правильным - при изменении UNO_PATH unoconv хоть как-то стал запускаться. Однако, полезли ошибки - failed to connect to soffice.exe и далее. Будем копать. Спасибо!
Автор: ASE_DAG
Дата сообщения: 13.07.2013 17:08
alexeySTP
> failed to connect to soffice.exe
> Будем копать.
Я вам по прежнему рекомендую сначала добиться результата от soffice без использования этого unoconv (см. пример выше). Возможно, вы сочтете, что эта обертка вам и не нужна.
Автор: alexeySTP
Дата сообщения: 13.07.2013 19:42
Не, мне нужна именно обертка!
С ошибками разобрался, теперь из командной строки все работает.
Остается запустить это безобразие из php под IIS.
Проблема была именно в переменной UNO_PATH и в нежности скрипта (параметры надо выставлять в строго определенной последовательности, иначе идут глюки). Не думал я, что все так дурако-неустойчиво!
Автор: ASE_DAG
Дата сообщения: 13.08.2013 22:31
Продолжая тему использования Либрофиса как пакетного конвертера. Надо знать, что есть у него такой баг № 37531, из-за которого вышеприведенное $ soffice --headless --convert-to txt:Text mydoc.odt не даст никакого результата, если процесс soffice уже запущен (открыт какой-либо документ). Там же предложенный воркэраунд состоит в использовании для конвертера иной конфигурационной директории (не ~/.libreoffice, а например ~/.libreoffice-headless):

$ soffice -env:UserInstallation=file://$HOME/.libreoffice-headless --headless --convert-to txt:Text mydoc.odt

Страницы: 1

Предыдущая тема: дубль


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.