Again , I saw some other options like docx4j, docmosis etc. Again, did a quick check but I cannot be sure if they are meant for reading of word files only.
Aspose.Words for Java is an advanced class library for Java that enables you to perform a great range of document processing tasks directly within your Java applications.
Aspose.Words for Java supports DOC, OOXML, RTF, HTML and OpenDocument formats. With Aspose.Words you can generate, modify, and convert documents without using Microsoft Word.
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?