You appear to have been very, very close. In CPCL (the RW's native language), all commands must end with both a new line and carriage return character. In your code, this correlates to an "\r\n" after each and every CPCL command. It looks like you forgot to put an "\r\n" after your final PRINT command in your CPCL chain.
Hopefully this information helps in the future instead of switching over to another framework. Using the Zebra SDK to send pure CPCL commands to the printer would have a significantly smaller bandwidth and should print faster than generating the QR barcode bitmap and sending the whole thing over. It may even print at a higher quality (and therefore be easier to scan) when using the native CPCL. And you wouldn't have to bundle another JAR in your app.
Reference: CPCL manual (section 2 page 1 note): http://www.zebra.com/content/dam/zebra/manuals/en-us/printer/cpcl-pm-en.pdf