A shelter from pigs on the wing
DMZ
дневник заведен 09-08-2004
постоянные читатели [32]
3 CaHuTaPa, 517design, Arde, Art`Is, aviabaza, BlackDrago, CyberJoe, DeadMorozz, Depeche Mode, DMZ, d_r, Ewige, glv12 Marla Zinger, goldenandy, Grimble, Hydralisk, Jude, Katrine Himitsu, Leave-me-alone, MISTIK, My3a, Nash, Nicholas Hawkwood, Pingvin, Riskoff, VorteX DrAgON, Wolfram, Букля_, достало, Муть, Рика, Эль
закладки:
цитатник:
дневник:
местожительство:
Красноярск, Россия, Сибирь
интересы [24]
программирование, C++, Depeche Mode, Star Wars, perl, DVD, JavaScript, FAR, lost, 80е, Half Life 2, долго спать, Miami Vice, веб-роботы, кентаврицы
антиресы [9]
грибы, грейпфрутовый сок, мёртвые люди, табличка обед, долго спать
22-02-2011 08:11 DOC / RTF / ODT / ... -> HTML / PDF / DOC / ODT / RTF / ...
Немного рабочих моментов и полезного кода. Может кому пригодится.

Конвертируем все что угодно в что-то другое с помощью OpenOffice/LibreOffice. Понадобилось тут автоматизировать наконец это дело.

Первая рабочая версия. Дальше уже можно пилить по вкусу.

Принцип работы — uno. Первый раз слышу. Похоже на COM в Windows. Запускает OpenOffice в фоне и общается с ним по TCP.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# Copyright (C) 2011 DMZ <dmz @the-island.ru>
# Licensed under the GNU LGPL v2.1 - or any later version.
 
from ooutils import oo_properties as oop, OORunner
from optparse import OptionParser, OptionValueError
import sys
import re
import os
 
from unohelper import systemPathToFileUrl
from com.sun.star.beans import PropertyValue
 
# http://wiki.services.openoffice.org/wiki/Framework/Article/Filter/FilterList_OOo_3_0
CONVERT = {
    'html': 'HTML (StarWriter)',
    'xhtml': "XHTML Writer File",
    'rtf': "Rich Text Format",
    'doc': "MS Word 97",
    'odt': "StarOffice XML (Writer)",
    'pdf': "writer_pdf_Export",
}
 
def read_format(option, opt, value, parser):
    value = value.lower()
    if value not in CONVERT:
        formats = ', '.join(CONVERT.keys())
        raise OptionValueError(
            'Формат вывода не поддерживается. Доступные форматы: %s' % formats)
    setattr(parser.values, option.dest, CONVERT[value])
 
if __name__ == '__main__':
    parser = OptionParser()
    parser.add_option('-i', '--input', dest='input')
    parser.add_option('-o', '--output', dest='output')
    parser.add_option('-f', '--format', action='callback', type='string',
        callback=read_format, dest='format', default=CONVERT['html'])
    (options, args) = parser.parse_args()
 
    if not options.input:
        print >>sys.stderr, u"Укажите месторасположение входящего файла (-i)"
        sys.exit(1)
 
    if not options.output:
        print >>sys.stderr, u"Укажите месторасположение итогового файла (-o)"
        sys.exit(1)
 
    odir = os.path.dirname(options.output)
    if not os.path.isdir(odir):
        print >>sys.stderr, u"Путь для сохранения (%s) не существует" % odir
        sys.exit(1)
 
    if not os.path.isfile(options.input):
        print >>sys.stderr, u"%s: Указанный файл не существует" % options.input
        sys.exit(1)
 
    oor = OORunner()
    desktop = oor.connect()
 
    document = desktop.loadComponentFromURL(systemPathToFileUrl(options.input),
        "_blank", 0, oop(ReadOnly=True, Hidden=True))
 
    print u"Сохраняем документ в %s" % options.output
 
    document.storeToURL(systemPathToFileUrl(options.output),
        oop(Overwrite=True, FilterName=options.format))
 
    document.close(True)
    oor.shutdown()
ooutils можно взять тут и сохранить в отдельный файл (положить или в папку со скриптом или в питоновские пути)

Фикс для нахождения LibreOffice (amd64):

1
2
3
4
# Find OpenOffice.
    _oopaths=(
        ('/usr/lib64/libreoffice/program', '/usr/lib64/libreoffice/program'),
     )
Пример:

1
python o2o.py -i document.odt -o document.pdf -f pdf
Комментарии:
22-02-2011 09:00
бот
А если я ключ -o забуду указать?
22-02-2011 09:11
Камрад
Пофиксено. Заодно забыл pdf-опцию указать
Камрад
Это ничего, что я к вам на "ВЫ" обращаюсь?

Ваш комментарий:
Камрад:
Гость []
Комментарий:
[смайлики сайта]
Дополнительно:
Автоматическое распознавание URL
Не преобразовывать смайлики
Cкрыть комментарий
Закрыть