Ghostscript mswinpr2 不自动选择打印机
Ghostscript mswinpr2 does not autoselect the printer
我已经通过 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%
选择什么,它都会弹出 "select printer" 对话框。
我是 运行ning 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"
Specifies which printer should be used. The printer_name should be typed exactly as it appears in the Printers control panel, including
spaces.
真正回答我最初的问题。必须更改命令行脚本,以转义 %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
这按最初计划进行。
由于评论空间不足,我已将此移至答案。
所以,我通常希望看到的(简单的)命令行是:
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)
的 setup.ps 的内容覆盖
现在,正如我之前建议的那样,您的问题是打印机的正确语法是“%printer%printer name”,而您在 setup.ps 中缺少 %printer%。我想 %printer% 丢失的原因是因为您将它放在批处理文件中并且 %printer% 被视为环境变量。由于未设置,因此不会被替换。
因此,我建议您从使用您提供的命令行开始,但 NOT 包括 setup.ps 并查看其作用。如果可行,那么您就知道问题出在哪里了。为了在批处理文件中使用 %printer%,您需要 'escape' '%',这意味着您将需要(我认为)%%printer%%
既然您有 PostScript 打印机 (C364SeriesPS),为什么不直接发送原始 PostScript 文件呢?您在这里所做的是让 Ghostscript 将 PostScript 呈现为图像(实际上是 Windows 位图),然后将其传递给打印系统,打印系统会将位图发送到打印机。这很慢,并且涉及到大量数据的混洗,而您可以直接将 PostScript 发送到打印机。
我已经通过 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%
选择什么,它都会弹出 "select printer" 对话框。
我是 运行ning 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" Specifies which printer should be used. The printer_name should be typed exactly as it appears in the Printers control panel, including spaces.
真正回答我最初的问题。必须更改命令行脚本,以转义 %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
这按最初计划进行。
由于评论空间不足,我已将此移至答案。
所以,我通常希望看到的(简单的)命令行是:
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)
现在,正如我之前建议的那样,您的问题是打印机的正确语法是“%printer%printer name”,而您在 setup.ps 中缺少 %printer%。我想 %printer% 丢失的原因是因为您将它放在批处理文件中并且 %printer% 被视为环境变量。由于未设置,因此不会被替换。
因此,我建议您从使用您提供的命令行开始,但 NOT 包括 setup.ps 并查看其作用。如果可行,那么您就知道问题出在哪里了。为了在批处理文件中使用 %printer%,您需要 'escape' '%',这意味着您将需要(我认为)%%printer%%
既然您有 PostScript 打印机 (C364SeriesPS),为什么不直接发送原始 PostScript 文件呢?您在这里所做的是让 Ghostscript 将 PostScript 呈现为图像(实际上是 Windows 位图),然后将其传递给打印系统,打印系统会将位图发送到打印机。这很慢,并且涉及到大量数据的混洗,而您可以直接将 PostScript 发送到打印机。