Объединение двух файлов .odt из кода
Как вы объедините два .odt файла? Выполнение этого вручную, открытие каждого файла и копирование содержимого будет работать, но оно неосуществимо.
Я попытался выполнить простой API (простой-odf-0.8.1-инкубатор) odttoolkit, чтобы достичь этой задачи, создав пустой 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 and Windings (для флажков), output masterFile - это все в TimesNewRoman. Сначала я подозревал последний параметр insertContentFromDocumentAfter, но менял его на false, прерывая (почти) все форматирование. Я делаю что-то неправильно? Есть ли другой способ?
Ответы
Ответ 1
Я думаю, что это "работает как разработанный".
Я попробовал это один раз с помощью глобального документа, который импортирует документы и отображает их как... до тех пор, пока стили абзацев имеют разные имена!
Использование одинаковых именованных шаблонов перезаписывается со значениями, которые имеет "основной" документ.
Итак, я закончил клонирование стандартных стилей с уникальными именами (для каждого документа).
НТН
Ответ 2
Случай Ma был довольно простым, файлы, которые я хотел слить, были сгенерированы одинаково и использовали одно и то же базовое форматирование. Поэтому, начиная с одного из моих файлов, вместо пустого документа исправлена моя проблема.
Однако этот вопрос останется открытым до тех пор, пока кто-нибудь не придумает более общее решение для удержания форматирования (возможно, на основе ответов и комментариев ngulams?).