Нужно: автоматически конвертировать .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"
Не знаю, насколько это кошерный метод, но он хотя бы работает.