Ghostscript.NET 无法使用选定的打印机名称进行打印

Posted

技术标签:

【中文标题】Ghostscript.NET 无法使用选定的打印机名称进行打印【英文标题】:Ghostscript.NET can't print with selected printer name 【发布时间】:2016-03-04 02:56:48 【问题描述】:

我想通过Ghostscript.NET 打印带有选定打印机名称的pdf 文件。这个应用程序实际上是CefSharp 浏览器的包装器。当用户点击下载按钮时,它会直接下载并使用选定的打印机打印出来。

你可以看到上面的截图,我通过 URL 查询字符串传递打印机名称。另外,我设置了选项-dNOPAUSE-dNOPROMPT。但是为什么还是跳出来一个打印窗口,而且默认选择的打印机不是我设置的呢?

知道这里出了什么问题吗?

编辑:2016 年 3 月 4 日上午 11:31

对于命令行中的ghostscript,它会像

"C:\Program Files (x86)\gs\gs9.18\bin\gswin32c.exe"^
 -empty^
 -dPrinted^
 -dBATCH^
 -dNOPAUSE^
 -dNOPROMPT^
 -sFONTPATH=C:\Windows\Fonts^
 -dNOSAFER^
 -dNumCopies=1^
 -sDEVICE=mswinpr2^
 -sOutputFile="%printer%Brother MFC-295CN Printer"^
 -f C:\Users\Dell\AppData\Local\Temp\file-tmp.pdf

但它仍然显示打印提示。

【问题讨论】:

嗯,URL 和您的日志语句实际上与它没有任何关系。您确定用于输出文件的语法正确吗?此外,如果应用程序甚至有可能在它喜欢的任何打印机上静默打印,我会感到非常惊讶。 @Rob 我是 Windows 窗体应用程序的新手。语法是正确的,我什至在cmd中尝试了ghostscript,但它仍然显示提示 您确定打印机名称 100% 正确并且存在于打印机列表中吗? 【参考方案1】:

将 -dQueryUser=3 添加到您的命令行以使用该打印机的默认设置直接打印到 default 打印机。

如果您要打印的打印机不是 Windows 默认打印机(在此系统上),那么您必须在打印对话框中指定打印机。这是因为有 2 个断开连接的实体。

1) 将数据发送到的打印机。 2) 以正确的格式创建数据。

mswinpr2 设备使用 Windows 打印系统从 Ghostscript 获取渲染输出并将其转换为打印机可以理解的任何内容(PostScript、HP-PCL、Epson ESC/P 等)。然后它将该数据发送到指定的打印机。请注意,这就是该打印机的驱动程序必须在本地可用的原因。

但是,mswinpr2 设备不知道哪个打印机设备驱动程序对应于“%printer%Name”形式的给定命名打印机,您必须告诉它。如果命名打印机是 Windows 默认打印机,那么您可以使用 -dQueryUser=3 来说明,否则您需要显示打印机对话框,以便用户可以选择正确的打印机,这就是 mswinpr2 用来创建它的数据的方法发送到打印机。

我相信完全有可能弄错!如果您在打印机对话框中选择 PostScript 打印机,然后设置 -sOuputFile=%printer%HP-PCL 打印机”,则该组合会将格式化为 PostScript 的输出发送到需要 PCL 的打印机,这种情况下的结果将是大量垃圾打印输出。

您需要谨慎使用此设备,这就是为什么默认行为是让您从可用打印机列表中选择打印机的原因。

【讨论】:

+1 表示-dQueryUser=3。但我想要实现的是使用不同的打印机进行不同的模块打印。弹出对话框时,用户可能会为该模块选择错误的打印机。有没有其他方法可以做到这一点? 目前没有。我们在周日对此进行了调查,现在有人正在解决代码中的逻辑脱节问题,幸运的是,将及时为下一个版本提交修复。既然您提到您正在创建一个应用程序,我只想提请您注意作为 AGPL 的 Ghostscript 许可证,因此如果您打算分发您的应用程序,您需要遵守许可证条件(或寻求商业许可)

以上是关于Ghostscript.NET 无法使用选定的打印机名称进行打印的主要内容,如果未能解决你的问题,请参考以下文章

Ghostscript.net 打印 pdf 页面方向

Ghostscript.NET.dll 打印pdf到指定打印机

打印时出现 GhostScript 图像质量问题

使用 Ghostscript 打印时页面裁剪和旋转不正确

尝试使用具有并行循环的多个 GhostScript 实例进行打印。

Ghostscript.NET 忽略后记