我已经创建了一个小脚本来通过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
脚本正在创建一个setup.ps
文件,这是gs文档为mswinpr2驱动程序推荐的。
看起来是这样的:
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%
选择什么,它都会弹出"select打印机“对话框。
我正在运行Windows8.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没什么意见,所以我不会进一步关注这个问题。
我问题的根源是,尽管如此,幽灵脚本文档是正确的,但在这里很容易被误解。特别是在windows的上下文中,说明%printer%
实际上不是env变量,但实际上是一个字符串文本,必须出现在输出文件名中,这不会有什么影响。
-sOutputFile="%printer%printer_name“指定应使用哪台打印机。printer_name应与打印机控制面板(包括空格)中所显示的完全相同。
来回答我最初的问题。必须更改命令行脚本,以转义%printer%
文字中的%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
这是按照最初计划进行的。
发布于 2016-04-15 09:21:46
我把这个移到了一个答案,因为在评论中没有足够的空间。
因此,我通常希望看到的是(简单的)命令行:
gswin32c -dNOPAUSE -dBATCH -dNOPROMPT -dNOQUERY -sOutputFile="%printer%C364SeriesPCL" 151008172940@123@000001@000001@PR_CCCC_Vertragspruef_4@CCCC_CAAA.358636.ps
您的命令行包括-r84
,它通常会将分辨率设置为84 dpi,如果这实际上得到了认可,您将打印一个非常低分辨率的PostScript图像,我非常怀疑您真的想要这样做。
除此之外,您还在实际的setup.ps程序之前发送PostScript。问题是,setup.ps重写了在命令行上设置的值。因此,您的-sOutputFile="%printer%C364SeriesPCL"
被定义/OutputFile (C364SeriesPCL)
的setup.ps内容覆盖。
现在,正如我前面所建议的,这里的问题是打印机的正确语法是“%打印机%打印机名称”,而在setup.ps中所拥有的是缺少%打印机%。我可以想象%打印机%丢失的原因是因为您将其放入批处理文件中,而%打印机%则被视为环境变量。因为它没有被设置,所以它被什么都取代了。
因此,我建议您从使用您提供的命令行开始,但是不包括,包括setup.ps,看看它能做什么。如果成功了,你就知道问题出在哪里了。为了在批处理文件中使用%打印机%,需要“转义”'%‘,这意味着您需要%%(我认为)%打印机%
既然您有一个PostScript打印机(C364SeriesPS),为什么不直接发送原始的PostScript文件呢?您在这里要做的是让Ghostscript将PostScript呈现给图像(实际上是Windows ),然后将其传递到打印系统,打印系统将位图发送到打印机。这是缓慢的,并涉及到洗牌周围的许多数据,当你可以直接发送PostScript到打印机。
https://stackoverflow.com/questions/36628850
复制相似问题