Слияние двух файлов.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?).