Merging two .odt files from code

倖福魔咒の 提交于 2019-12-20 19:10:34

问题


How do you merge two .odt files? Doing that by hand, opening each file and copying the content would work, but is unfeasable.

I have tried odttoolkit Simple API (simple-odf-0.8.1-incubating) to achieve that task, creating an empty TextDocument and merging everything into it:

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);
}

And that works reasonably well, however it looses information about fonts - original files are a combination of Arial Narrow and Windings (for check boxes), output masterFile is all in TimesNewRoman. At first I suspected last parameter of insertContentFromDocumentAfter, but changing it to false breaks (almost) all formatting. Am I doing something wrong? Is there any other way?


回答1:


I think this is "works as designed".

I tried this once with a global document, which imports documents and display them as is... as long as paragraph styles have different names !

Using same named templates are overwritten with the values the "master" document have.

So I ended up cloning standard styles with unique (per document) names.

HTH




回答2:


Ma case was a rather simple one, files I wanted to merge were generated the same way and used the same basic formatting. Therefore, starting off of one of my files, instead of an empty document fixed my problem.

However this question will remain open until someone comes up with a more general solution to formatting retention (possibly based on ngulams answer and comments?).



来源:https://stackoverflow.com/questions/25200764/merging-two-odt-files-from-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!