Microsoft word has this "Round Trip" XML format, meaning if you save as XML, word will be able to open that XML file as a word document.
If you export a word document as XML and put it on your server, you can use it as a template and manipulate the xml in java in a number of ways (search and replace, etc) and then download it as a word document.
In my project, I use certain keywords in the word document [USERNAME] that will be replaced with the actual user name when the user downloads it.
If you need more than simple replace, there is a library called
java2word that uses this XML concept to create and manipulate word documents. It bills itself as "The missing library to generate MS Word Documents from Java code without any special components."
a new version was just released in February. If you don't wish to use the library, it at least will have some good examples in the code of how you could do it yourself.
EDIT: I haven't tried to do any fancy charts with java2word. I would agree that creating images in JFreeChart and then putting them in as images would be the way to go. Is the requirement that you have to have actual functioning Microsoft charts in your document?