Изменение содержимого файла .odt

Автор sergen, 28 марта 2013, 23:35

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

sergen

Система Убунту 12.04
Имеется файл созданный в LibreOfficeWriter 3.5.7.2. с расширением odt. В файле находятся изображения и текст. Хочу заменить картинки внутри файла не прибегая к помощи самого LibreOfficeWriter (т.е. написав спец программу). Знаю что файл ОДФ является ЗИП архивом. Разобрался в каких файлах лежат нужные мне данные. Но вот незадача - изменение хоть одной буквы моих данных приводит к поломке архива без возможности восстановления работоспособности. Может есть какие-то тонкости по обратному запаковыванию архива (типа контрольной суммы или еще чего...). Кроме того растровые изображения в архиве имеют длинные имена из цифр, не понятно как они генерируются.

greenman


Yakov

Ещё важен регистр букв в именах файлов.

sergen

#3
То что при изменении имени изображения необходимо изменить и ссылки на него я знаю. Но всё равно не получается. Проводил несколько опытов:
1) распаковывал файл, сразу запаковывал обратно - работает
2) изменял название изображения, менял соответственно имя в манифесте и др  файлах, запаковывал - не работает
3) редактировал размер изображения в GIMPе, имя оставалось то же - не работает
4) добавлял одну букву в текстовой части документа - не работает
5) создавал не встроенное изображение , а со ссылкой на него, потом менял ссылку в архиве на другое изображение  - не работает

В чем косяк?

Встречал на просторах интернета человека с такой же проблемой, единственное что ему предложили - сохранять файл в версии 1.0. Как это делать то же не понятно.

greenman

#4
Какой программой создаётся zip?

Можете выложить сюда пример "поломанного" файла.

sergen

Встроенный архиватор Убунты -  File-roller ArchiveManager. С дополнением под названием 7zip.

greenman

#6
Попробуйте в консоли
$ zip -r test3 *
у меня созданный таким образом файл (с измененным именем Pictures/xxxx.jpg) после переименования zip -> odt открывается writer-ом.



[вложение удалено Администратором]

sergen

Ваш файл работает.

У меня этим же способом не получается. Пробовал и имя изображения менять и одну букву.

В указанном коде под  "test3" я понимаю имя папки которую собираемся архивировать. Что значит "звездочка" - не знаю.

greenman

Не надо архивировать папку.

Надо, находясь среди файлов
$ ls
Configurations2  content.xml  manifest.rdf  META-INF  meta.xml  mimetype  Pictures  settings.xml  styles.xml  Thumbnails

выполнить команду, приведенную выше. "*" - означает все файлы.

test3 - имя создаваемого архива (test3.zip)

sergen

#9
Тьфу ты .............. :-X
Пипец просто.
Я все время архивировал папку.

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


1) замена картинки прошла успешно
2) изменение размера картинки - успешно
3) изменение названия картинки - успешно
Ошибок не отображалось!!

Инструкция :
при изменении имени изображения необходимо изменить имя и в соответствующих файлах (content.xml , META-INF/manifest.xml), соблюдать регистр букв в именах файлов и в ссылках на них, архивировать файлы, а не папку с фалами. При добавлении изображений - добавлять их и в файлы content.xml , META-INF/manifest.xml

volkman

Я работаю с архивом, правда, под виндой. Первое и главное - не распаковывать архив. Его надо просто "открыть" не выходя из программы архивации ( у меня - 7z). Далее открытые файлы внутри обнаруженных директорий можно мучить как угодно.  Картинки я не менял, но текстовую составляющую - спокойно, обычно внешним редактором, чаще notepad++. Далее просто закрываем все по очереди и проги спрашивают, сохранить ли результат. Спросит и архиватор ( у меня - 7z). И все. Суть, видимо, в том, что мучая архив, не выходя из архиватора, мы не меняем настройки архивации, примененные в данной версии libre, вне зависимости, какие они и меняются ли от версии к версии.

ape

Или в том, что время создания архива\файла отличаeтся от того, что написано в meta.xml

volkman

А вообще для смены картинок я обычно пользуюсь расширением change picture http://aoo-extensions.sourceforge.net/en/project/ChangePicture