This is due to the fact that the 'lp' command is reading in the contents of the file directly, not the text or what you want to have printed. To get this to print correctly, some sort of filter would have to be installed so that the 'lp' command would recognize what is going on. As to where you would get this filter, I am not entirely sure.
Something you could try to do is have your VB program call a perl script. Perl can be setup to open the program (ie. word, adobe acrobat, etc) and then traverse the menu options to print. This way it would be Word or Adobe that is doing the printing and not the 'lp' command.
Not sure what else could be done, anyone else have any ideas?