Найти - Пользователи
Полная версия: Python-LibreOffice. Как выгрузить скриптом текст из файла .odt с шрифтами, стилями и разметкой таблицы?
Начало » Python для новичков » Python-LibreOffice. Как выгрузить скриптом текст из файла .odt с шрифтами, стилями и разметкой таблицы?
1
Maksim_Agamon
Добрый день.
Задача следующая. Неободимо открыть файл .odt, выгрузить из него весь текст (включая разметку таблицы и формат текста, типа полуирного шрифта и т.д.) и записать всё это в другой файл.
В промежутке я редактирую считанный текст заменой конструкций типа {{ name }} на другой текст.

Как перекнуть только текст с изменениями у меня получилось, но стили и таблица при это пропадает. На месте ячеек таблицы, к примеру, пустые места.
Вытаскиваю текст таким образом:

 origin_file = "g2.odt"
with open(origin_file, 'r') as in_file:
    	hzx = in_file.read()
print(hzx)
Как выгрузить через скрипт python стили текста и таблицу? Гугл внятного ответа не дал.
doza_and
Maksim_Agamon
Как выгрузить через скрипт python стили текста и таблицу?
И как они должны выглядеть?
Maksim_Agamon
open(origin_file, ‘r’) as in_file:
Вам читать про режимы открытия файлов: http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
про формат файла:
https://wiki.openoffice.org/wiki/ODF_%E2%80%94_%D0%BE%D1%82%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%BE%D1%84%D0%B8%D1%81%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9:_%D0%A7%D0%B0%D1%81%D1%82%D0%BE_%D0%B7%D0%B0%D0%B4%D0%B0%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B
поскольку это zip То дальше:
https://en.wikipedia.org/wiki/Zip_(file_format)
Внутри zip лежит xml:
https://www.ibm.com/developerworks/ru/library/x-newxml/index.html
Про программные инструменты работы с форматом.
https://pypi.org/project/odfpy/#description
Maksim_Agamon
doza_and
И как они должны выглядеть?
Видимо я как то не так выразился. В том odt, что я прикрепил в первом сообщении присутствуют такие модификаторы текста как: курсив, полужирный, подчеркивание. Плюс ко всему есть таблица.

Когда я открываю этот файл для чтения, тем методом что я описал, я благополучно читаю сам текст и вставляю в него некоторые string переменные, но все модификаторы при этом не читаются. Я думал, что есть вариант чтения именно odt файла в python, чтобы я мог получить и текст и его оформление. Видимо такого способоа нет.

То что вы предлагаете использовать xml это разумно. Но я выбрал немного другой путь, я свой odt экспортировал в html, вставил нужные string, записал в новый html и в браузере открываю для печати.
Изначально задумывалось на входе odt и на выходе odt, чтобы можно было редактировать во Writer и оттуда печать делать.
Впринципе вопрос решен и его можно закрыть. Приведу свой код на всякий случай, может кому пригодится.

     #задаю имена исходного и генерируемого файлов
    origin_file = "g3.html"
    generate_file = "g4.html"
    #объявляю пустой список для хранения данных ячеек таблицы ods
    data_list = []
    #читаю текст из исходного файла
    with open(origin_file, 'r') as in_file:
    	hzx = in_file.read()
    print(hzx)
    #открываю генерируемый файл на запись
    output1 = codecs.open(generate_file, "w", encoding="utf-8")
    #создаю шаблон текста исходного документа
    t = Template(hzx)
    #получаю все имеющиеся данные в листе 'for_form' таблицы Program.ods
    doc = ODSReader(u'Program.ods', clonespannedcolumns=True)
    table = doc.getSheet(u'for_form')
    for i in range(len(table)):
        for j in range(len(table[i])):
            print (table[i][j])
	    d = table[i][j].encode(encoding='utf-8')
	    data_list.append(d)
    #создаю контекст-переменную из списка data_list для подстановки в шаблон вместо конструкций django
    c = Context({"strs": data_list})
    #рендер нового текста в генерируемый файл
    output1.write(t.render(c))
    output1.close()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB