So where Windows works and Linux doesn't, are you sure its the driver? My first thought would be the port. Windows uses RAW by default (HP Jet Direct) on Linux. Or LPD/LPR can be used by either.
CUPS tends to use IPP, which isn't as reliable in my experience.
The driver is the issue if the job gets to the printer and comes out wrong. If it doesn't all get there (or none of it) the issue is usually the port/protocol.
The Linux drivers for the printer Xerox Phaser 3140 don't work correctly anymore on the Linux operating system. The printer job in the CUPS queue gets canceled without warning... so only about every 3rd print job gets done. Sometimes the printer keeps hanging after the print - no new print jobs are accepted. The printer works correctly with Windows.
I'm using the Ubuntu 18 LTS distribution. It's a shame, because the printer was advertised and labeled as being Linux friendly.
If you don't fix this, I will NEVER buy anything from your company again!