Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Libre Office: пакетное конвертирование файлов  (Прочитано 2250 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Нужно: автоматически конвертировать .doc в .docx

Про unoconv знаю. Это скрипт на змейском языке, вызывающий в итоге бинарник soffice.

unoconv -f docx -o "~/1/тестовый документ.docx" "тестовый документ.doc"
Это работает, но только если soffice не запущен.

Еще и в справке либры нашел пример, как это делать, но только для pdf:

/usr/bin/soffice --invisible --convert-to pdf:writer_pdf_Export --outdir "/home/onotole/1" "/home/onotole/1/тестовый документ.doc"
Обратите внимание, writer_pdf_Export — это имя фильтра для конвертирования. Мне нужно также конвертировать в простой текст, это я как-то сумел найти. Вернее, имя фильтра найти. ВНЕЗАПНО это вовсе не writer_txt_Export, а вовсе даже Text. Имя экспортирующего фильтра для docx найти или подобрать методом тыка не получилось. И точно так же не работает, если либра уже запущена.

Итого две проблемы. Первая не совсем проблема, но хотелось бы в моем частном узконаправленном случае обойтись без полусотни килобайт прожорливой питонятины. То есть, надо имя фильтра. Прямым поиском в листинге unoconv не нашел. Возможно, оно из кусочков динамически собиратся. Или назван настолько интуитивно понятно, что требуется незаурядная интуиция.

Вторая более серьезна. Что unoconv, что прямой вызов либроофиса не срабатывает, если либра уже запущена (обычный гуй-режим). Это крайне неудобно, мне либра часто нужна с несколькими открытыми документами в разной степени редактирования.

Еще откопал в своих записках со смартфона на бегу, мол надо запускать либру так:

/usr/bin/libreoffice "--accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"
Тогда она типа будет заодно слушать сокет. Однако не помогло. Может быть, в примерах выше надо что-то дописать чисто конкретно про этот сокет?

Пользователь решил продолжить мысль [time]06 Февраль 2015, 15:25:41[/time]:
Тогда она типа будет заодно слушать сокет. Однако не помогло. Может быть, в примерах выше надо что-то дописать чисто конкретно про этот сокет?
Фигня детектед. :(
На рабочем компе такое решение работает

ps x | grep office
 4464 ?        Sl     0:00 /usr/lib/libreoffice/program/oosplash --accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager
 4481 ?        Sl     0:02 /usr/lib/libreoffice/program/soffice.bin --accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager --splash-pipe=5

Если либра запущена с такими опциями, unoconv спокойно обрабатывает документ, даже если он открыт в либре.
На домашнем ругается на что-то. Дома уточню.
Ось одна и та же, 1:1.

Пользователь решил продолжить мысль [time]06 Февраль 2015, 18:35:50[/time]:
(тихо сам с собо-ою…)

Опробовал еще раз, unoconv отработал нормально. Собака порылся вот где: оказывается при запуске либры не из эмулятора терминала (или псевдотерминала tty) мои персональные alias не учитываются. И запуск отовсюду кроме командной строки конкретно в гуевом эмуляторе терминала осуществляется с дефолтными ключами. Т.е. будто указано не libreoffice, а чисто конкретно /usr/bin/libreoffice.

От засада. Опять костыли надо.

Пользователь решил продолжить мысль [time]06 Февраль 2015, 20:03:16[/time]:
(…продолжаем разговор)

Запилил такой костыль на месте штатного симлинка «/usr/lib/libreoffice»:

#! /bin/bash
/usr/lib/libreoffice/program/soffice --"accept=socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"


Не знаю, насколько это кошерный метод, но он хотя бы работает.
« Последнее редактирование: 09 Февраля 2015, 15:40:27 от 027 »
Если бы было достаточно man bash, не было бы ABS.

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.