I have created a small script to run my PS file through the windows printer driver for printout.
I use this code:
echo mark /NoCancel true /BitsPerPixel 4 /OutputFile (%printer%%PNAME%) /UserSettings ^<^</DocumentName (%MYDOCNAME%) ^>^> (mswinpr2) finddevice putdeviceprops setdevice>setup.ps
gswin32c -dNOPAUSE -dBATCH -r84 setup.ps %1
The script is creating a setup.ps file as recommended by the gs documentation for the mswinpr2 driver.
It looks like this:
mark
/NoCancel true
/BitsPerPixel 4
/OutputFile (Windows printer name)
/UserSettings
<<
/DocumentName (the text for the job in the spooler queue)
>>
(mswinpr2)
finddevice
putdeviceprops
setdevice
%printer% resolves to the empty string on my machine.
%PNAME% is the name of the windows printer, "C364PS" for me.
The %printer%%PNAME% is taken from the documentation to give the desired target printer. To stay with the example printer it will resolve to C364PS
gs is then called as
gswin32c -dNOPAUSE -dBATCH -r84 setup.ps <name of desired ps file here>
This works as expected, regarding the printed result. But I want a silent printout, since I have chosen the printer before. Whatever I choose for %PNAME%, it will always pop up the "select printer" dialog.
I am running Windows 8.1 and tried gs 8.70 and 9.19.
If I add /QueryUser 3 to the setup.ps, the printout starts without further confirmation of the printer, but then it will only print on the default printer, not on the one selected in the /OutputFile.
What am I missing?
Update: I have checked this question's result, but it does not work for me, dialog keeps popping up: https://superuser.com/questions/807027/how-to-print-with-ghostscript-in-silent-mode
Update 2: I have now (as requested) tried a commandline, with the same result. I also tried without the %printer%, no difference here:
gswin32c -dNOPAUSE -dBATCH -dNOPROMPT -dNOQUERY -sOutputFile="%printer%C364SeriesPCL" -r84 setup.ps 151008172940@123@000001@000001@PR_CCCC_Vertragspruef_4@CCCC_CAAA.358636.ps
setup.ps is this, no linebreaks have been added:
mark /NoCancel true /BitsPerPixel 4 /OutputFile (C364SeriesPCL) /UserSettings <</DocumentName (151008172940@123@000001@000001@PR_CCCC_Vertragspruef_4@CCCC_CAAA.358636) >> (mswinpr2) finddevice putdeviceprops setdevice
Solution:
The string %printer% is actually a literal in the setup.ps /OutputFile () or on the commandline. So changing the setup.ps worked:
mark /NoCancel true
/BitsPerPixel 4
/OutputFile (%printer%C364SeriesPCL)
/UserSettings <<
/DocumentName (151008172940TBS000001000001PR_CONT_Vertragspruef_4CONT_CONT.358636)
>>
(mswinpr2)
finddevice
putdeviceprops
setdevice
This way, the printer is found. I tried to copy the behavior with a commandline switch -sOutputFile but was not able to make the dialog go away without the setup.ps - I tried %%printer%%, but to no avail. As I am fine with the setup.ps, I am not following that further.
The root of my problem was, that the ghostscript documentation is correct, nevertheless, easily misunderstood here. Especially in the context of windows, it would not hurt to state explicitely, that %printer% is actually no env-variable, but really a string literal, that must be present in the output filename.
-sOutputFile="%printer%printer_name" Specifies which printer should be used. The printer_name should be typed exactly as it appears in the Printers control panel, including spaces.
To really answer my initial question. The commandline script must be changed, to escape the % signs in the %printer% literal:
echo mark /NoCancel true /BitsPerPixel 4 /OutputFile (%%printer%%%PNAME%) /UserSettings ^<^</DocumentName (%MYDOCNAME%) ^>^> (mswinpr2) finddevice putdeviceprops setdevice>setup.ps
gswin32c -dNOPAUSE -dBATCH -dNOPROMPT -r84 setup.ps %1
This works as initially planned.