Seeking alternative to custom port monitor to redirect XPS print job to file system (i.e. "print to file" without filename prompt)
I have a project where I need to write a print job from a given print queue to the file system in XPS format. This needs to happen without user intervention.
In other words, I need to have a printer queue with a PORTPROMPT
port without the prompt.
I had researched this years ago. At the time, I found that the best way to achieve this was to write a custom port monitor which would simply write the spool file, provided by the XPS printer driver, to disk. Having a port monitor also nicely takes care of removing the job from the spooler once it has been written out. Easy project, right? Well, not so much.
As it turns out, as per the printer driver DDK documentation at Port monitors and language monitors, a v4 printer driver cannot have a non-Microsoft port monitor. And Microsoft doesn't provide a PORTPROMPT
-like port monitor which doesn't have an interactive prompt.
I am brushing on my printer DDK knowledge, but from what I understand, I can't really do this from the printer driver or print processor level. Or does it?
I should also factor in the fact that Microsoft is moving away entirely from the traditional printer driver model, even calling it "legacy". The future is IPP, Universal Print and Mopria, apparently.
One idea is to create a service which would provide a "fake" XPS-compatible printer. The spooler would then send the print job as XPS directly to my service, which could then do whatever it wants. But this seems like a lot of hoops to jump through when everything I need, i.e. the print job in XPS format, is already right there in the spooler directory, thanks to server-side rendering.
(yes, there is a lot of assumptions here, including server-side rendering -- but we have some control over the environment and not supporting client-side rendering is an acceptable limitation)
Anyways, I am seeking guidance as to how to best approach this project. Any idea, do's and dont's would definitely be appreciated.
Thank you,
Yannick