Слияние двух файлов.odt из кода

Как объединить два файла.odt? Делать это вручную, открывая каждый файл и копируя содержимое, будет работать, но это невозможно.

Я попробовал odttoolkit Simple API (simple-odf-0.8.1-кубирование), чтобы выполнить эту задачу, создав пустой TextDocument и объединив в него все:

private File masterFile = new File(...);

...

TextDocument t = TextDocument.newTextDocument();
t.save(masterFile);

...

for(File f : filesToMerge){
   joinOdt(f);
}

...

void joinOdt(File joinee){
   TextDocument master = (TextDocument) TextDocument.loadDocument(masterFile);
   TextDocument slave = (TextDocument) TextDocument.loadDocument(joinee);
   master.insertContentFromDocumentAfter(slave, master.getParagraphByReverseIndex(0, false), true);
   master.save(masterFile);
}

И это работает достаточно хорошо, однако при этом теряется информация о шрифтах - исходные файлы представляют собой комбинацию Arial Narrow и Windings (для флажков), выходной файл masterFile находится в TimesNewRoman. Сначала я заподозрил последний параметр insertContentFromDocumentAfter, но изменив его на false, нарушает (почти) все форматирование. Я делаю что-то неправильно? Есть ли другой путь?

2 ответа

Я думаю, что это "работает как задумано".

Я попробовал это однажды с глобальным документом, который импортирует документы и отображает их как есть... при условии, что стили абзаца имеют разные имена!

Использование одноименных шаблонов перезаписывается значениями, которые имеет "главный" документ.

Так что я закончил клонированием стандартных стилей с уникальными (для каждого документа) именами.

НТН

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

Однако этот вопрос останется открытым до тех пор, пока кто-нибудь не придет к более общему решению по форматированию хранения (возможно, на основе ответа и комментариев ngulams?).

Другие вопросы по тегам