if you are looking for a server-only solution, it can't be done in one step.
And it's a feature that it can't be done.
You want to execute code on a server, and have it affect the client's machine.
First, if it can be done with printing, it can be done with files and other system settings. That's a huge security risk.
Second, by it's nature, it can't be done. I don't believe there's a protocol that networks computers in that manner. (I could be wrong). Code executed affects the machine it's being executed on.
The problems with your clients' browser's not liking java is likely a direct relationship to security issues.
You can create a solution that operates in two steps.
Step One: Users enter in apropriate data for the forms.
The server creates a document (maybe PDF, excel, word, maybe a gif that looks like a document)
Step Two: Users recieve an email with the document attached or an apropriate mime type is used to stream the document in it's native application to the client.
With the document being read by code on the client's machine, it can be printed out locally. Secondly, not using the browser will get rid of browser's head/foot stuff.
I would use excel, probably. I'm an excel whiz and can make a document look like anything in excel. (in fact, I've made official forms for a similar application in excel).
Make an excel file to serve as a template. Duplicate the excel file when you recieve the information, saving the new version with the apropriate data in the apropriate places. (This is easy enough if you are on a windows machine using COM, but if not there are libraries to assist you).Send the user an email with the new excel doc as an attachment. Save the data in a database for later use, if needed. Delete the new file.
You may find use for a macro to be included in the excel file... for instance have a button in excel linked to a macro that will print.
This way, from the user's perspective:
User enters data, recieves an email, opens excel, clicks big button that says print. Snip snap done.