我创建了一个小脚本来通过Windows打印机驱动程序运行我的PS文件以进行打印输出。
我使用此代码:
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
该脚本正在根据mswinpr2驱动程序的gs文档的建议创建setup.ps
文件。
看起来像这样:
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%
解析为我机器上的空字符串。
%PNAME%
是Windows打印机的名称,对我来说是“C364PS”。
从文档中提取%printer%%PNAME%
以提供所需的目标打印机。要继续使用示例打印机,它将解析为C364PS
gs称为
gswin32c -dNOPAUSE -dBATCH -r84 setup.ps <name of desired ps file here>
关于打印结果,这可以按预期工作。但我想要一个无声的打印输出,因为我之前选择了打印机。无论我为%PNAME%
选择什么,它都会弹出“选择打印机”对话框。
我正在运行Windows 8.1并尝试了gs 8.70和9.19。
如果我将/QueryUser 3
添加到setup.ps,打印输出就会在没有进一步确认打印机的情况下启动,但它只会在默认打印机上打印,而不会在/OutputFile
中选择的打印机上打印
我错过了什么?
更新:我已经检查了这个问题的结果,但它对我不起作用,对话框不断弹出:https://superuser.com/questions/807027/how-to-print-with-ghostscript-in-silent-mode
更新2:我现在(根据要求)尝试了一个命令行,结果相同。我也试过没有%printer%
,没有区别:
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就是这样,没有添加任何换行符:
mark /NoCancel true /BitsPerPixel 4 /OutputFile (C364SeriesPCL) /UserSettings <</DocumentName (151008172940@123@000001@000001@PR_CCCC_Vertragspruef_4@CCCC_CAAA.358636) >> (mswinpr2) finddevice putdeviceprops setdevice
解决方案:
字符串%printer%
实际上是setup.ps
/OutputFile ()
或命令行中的文字。所以改变setup.ps工作:
mark /NoCancel true
/BitsPerPixel 4
/OutputFile (%printer%C364SeriesPCL)
/UserSettings <<
/DocumentName (151008172940TBS000001000001PR_CONT_Vertragspruef_4CONT_CONT.358636)
>>
(mswinpr2)
finddevice
putdeviceprops
setdevice
这样就找到了打印机。我尝试使用命令行开关-sOutputFile
复制行为但是如果没有setup.ps则无法使对话框消失 - 我尝试了%%printer%%
,但无济于事。由于我对setup.ps很好,所以我没有进一步了解。
我的问题的根源是,ghostscript文档是正确的,然而,这里很容易被误解。特别是在windows的上下文中,明确表示状态不会受到影响,%printer%
实际上不是env-variable,而是字符串文字,必须出现在输出文件名中。
-sOutputFile = “%打印机%打印机名称” 指定应使用哪台打印机。 printer_name的输入应与打印机控制面板中显示的完全相同,包括 空格。
真正回答我的初步问题。必须更改命令行脚本,以转义%
文字中的%printer%
符号:
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
这是最初计划的。
答案 0 :(得分:0)
我已将此移至答案,因为评论中没有足够的空间。
因此,我通常希望看到的(简单)命令行是:
gswin32c -dNOPAUSE -dBATCH -dNOPROMPT -dNOQUERY -sOutputFile="%printer%C364SeriesPCL" 151008172940@123@000001@000001@PR_CCCC_Vertragspruef_4@CCCC_CAAA.358636.ps
你的命令行包括-r84
,通常会将分辨率设置为84 dpi,如果真的得到尊重,你将要打印一张可怕的低分辨率PostScript图像,我非常怀疑你真的想要它。
除此之外,您还在实际的PostScript程序之前发送setup.ps.问题是setup.ps会覆盖您在命令行上设置的值。因此,您定义-sOutputFile="%printer%C364SeriesPCL"
/OutputFile (C364SeriesPCL)
现在,正如我之前建议的那样,您的问题是打印机的正确语法是&#34;%printer%printer name&#34;你在setup.ps中有什么缺少%printer%。我想象%缺少%printer%的原因是因为你将它放在一个批处理文件中,%printer%被视为一个环境变量。由于它没有设置,它什么都没有被替换。
所以,我建议您先使用您提供的命令行开始,但不包括setup.ps,看看它是做什么的。如果有效,那么你就知道问题所在。要在批处理文件中使用%printer%,您需要“逃避”#39; &#39;%&#39;这意味着你需要(我认为)%% printer %%
鉴于您有PostScript打印机(C364SeriesPS),为什么不发送原始的PostScript文件?你在这里做的是让Ghostscript将PostScript呈现给图像(实际上是Windows位图),然后将其传递给打印系统,打印系统将位图发送到打印机。这很慢,并且当您可以直接将PostScript发送到打印机时,会涉及到大量数据的混乱。