On Mac there are things you can control with applescript and shell scripts that allow you to manage knowing if the print job was sent to the printer or not. You will not get any info on if the user cancels the job out of the print queue. You will bypass the native print dialog and use the default system printer directly. Switching printers gets complicated but I suppose it is doable.
I am assuming Windows has some similar system level script access, but I am not familiar with it. iPad printing..good luck.
When you script the whole process, than you can capture a user cancel. Then you'd know he did not print.
You will never capture when the user throws away the print
Scripted prints would be pretty easy, but you would need to identify the name of the printer at the client, right?
I have had some interesting ways to setup scripts for remote printers or printers that are shared by a particular machine(not IP network printers).
You can get Printer details via plugin (mbs, 2emPower, etc.), then 'pack' that information in a script, create a custom menu fuer printing to make sure that users are using that script
set error capture [on]
#when user cancels an error of 1 is captured, 0 means no error
Set Field [PrintedOn; get(CurrentTimestamp)]