Just to throw out another option, I'll tell you the one that's given me the "best" result as far as accurately reproducing the appearance of the Word Doc. I used jacob to call MS Word (via COM) to do the conversion. This will give you a perfect recreation of the Word doc as PDF.
However, there are a few downsides.
First, it's not pure java. Jacob is a java wrapper around a C++ native library. This has caused a few class loader issues in a servlet environment (specifically, we have to totally restart the web container in order to restart the application).
Second, you need Word (and the word "save as PDF" extension). This means that it's not portable to platforms besides Windows.
Finally, exception handling is spotty. I've seen it leave a file open (and locked) after it seems like it should be all done. This doesn't happen very often, but it is something I ran into.
All in all, though, it does give you an option if your users want an absolutely perfect recreation. I tried OpenOffice, as well, and the API was better, as Stu Thompson's post shows, but the documents were different enough that my users were unsatisfied, and this was what I ended up doing.