首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ghostscript mswinpr2不自动选择打印机

Ghostscript mswinpr2不自动选择打印机
EN

Stack Overflow用户
提问于 2016-04-14 16:28:37
回答 1查看 2.3K关注 0票数 1

我已经创建了一个小脚本来通过windows打印机驱动程序运行我的PS文件,用于打印输出。

我使用以下代码:

代码语言:javascript
运行
复制
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驱动程序推荐的。

看起来是这样的:

代码语言:javascript
运行
复制
   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然后被称为

代码语言:javascript
运行
复制
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%,这里没有区别:

代码语言:javascript
运行
复制
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是这样的,没有添加任何换行符:

代码语言:javascript
运行
复制
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是有效的:

代码语言:javascript
运行
复制
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%符号:

代码语言:javascript
运行
复制
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

这是按照最初计划进行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 09:21:46

我把这个移到了一个答案,因为在评论中没有足够的空间。

因此,我通常希望看到的是(简单的)命令行:

代码语言:javascript
运行
复制
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到打印机。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36628850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档