【发布时间】:2016-04-14 16:28:37
【问题描述】:
我创建了一个小脚本,通过 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% 实际上不是环境变量,而是真正的字符串文字,它必须出现在输出文件名中。
-sOutputFile="%printer%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
这按最初的计划工作。
【问题讨论】:
-
首先,不要引用你的脚本,而是尝试一个命令行,然后你可以给出一个示例命令行来演示你的问题,而不是让我们破译你的脚本并想知道哪些 % 是变量的值你懒得提了。我强烈怀疑它在批处理文件中处理 % (即 %printer% 是否正在扩展)。但是,据我所知,有 NO 选项用于静默打印,除非您要打印到默认打印机。
-
如你所愿,我会为你展开 setup.ps。
-
批处理命令正确解析所有变量。我可以在 setup.ps 中看到预期的结果。打印作业名称正确显示在队列中,但未自动选择打印机。
-
我确定您可以看到最终结果,但是(直到您上传 setup.ps),我看不到。但是....您已将与 /OutputDevice 键关联的值替换为 (WIndows 打印机名称),这实际上什么也没告诉我。 PLEASE 引用一个确切的命令行,而不是您修改过的内容。我再次敦促您在测试时使用命令行,而不是脚本。 mswinpr2 出现对话框的最可能原因是它无法找到打印机。如果您输入错误的打印机名称(即您隐藏的位),或者您没有具有该名称的本地打印机,则会发生这种情况。
-
我明白,但是如果没有我系统上可用打印机的完整列表,您无法判断我输入的文本是真正的名称还是只是胡言乱语。我现在已经按照您的要求添加了确切的命令行,为了让您能够真正分析这一点,我在系统上添加了一个打印机列表。我真的很困惑我做错了什么,任务似乎很简单。
标签: windows printing ghostscript