【发布时间】:2011-02-05 16:40:25
【问题描述】:
我想通过 GhostScript 在 Windows 的网络打印机上打印 PDF 文件。
(我不想使用 Adobe Reader)
我已阅读 gswin32c.exe,它可以完成这项工作。
我尝试了许多命令,但找不到强制 gs 在我的(Windows 默认)网络驱动器上打印 PDF 的方法。
我不需要精确的网络打印机-可以使用默认值。但如果没有这样的选项,我也很乐意传递打印机名称。 (我已经尝试使用 param -SDevice="\server_IP\printer_name" 但这也不起作用......)
在 Windows cmd 下运行的命令:
gswin32c -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile="\\spool\\\Server_Name\Printer_name" "C:\test.pdf"
基于上述创建的方法 - 不起作用并引发异常。 (错误代码 = 1)
/// <summary>
/// Prints the PDF.
/// </summary>
/// <param name="ghostScriptPath">The ghost script path. Eg "C:\Program Files\gs\gs8.71\bin\gswin32c.exe"</param>
/// <param name="numberOfCopies">The number of copies.</param>
/// <param name="printerName">Name of the printer. Eg \\server_name\printer_name</param>
/// <param name="pdfFileName">Name of the PDF file.</param>
/// <returns></returns>
public bool PrintPDF (string ghostScriptPath, int numberOfCopies, string printerName, string pdfFileName) {
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = " -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=" + Convert.ToString(numberOfCopies) + " -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\" + printerName + "\" \"" + pdfFileName + "\"";
startInfo.FileName = ghostScriptPath;
startInfo.UseShellExecute = false;
Process process = Process.Start(startInfo);
return process.ExitCode == 0;
}
知道如何让它在 C# 下工作吗?
【问题讨论】:
-
抱歉,只是因为您打算从 C# 应用程序调用它并不会使其成为编程问题,我建议 SuperUser 解决这个 Ghostscript 问题,并投票支持将这个问题移到那里给你。
-
我已经编辑了帖子,现在更加具体化 C#
-
@Lazarus,再次,您根据命令的格式误解了编程。调用函数是基本的编程概念。语法和方式根本不重要,因为它们与实现有关。这个概念基于一个模块、它的功能和传递的参数。
gswin32c -dPrinted ...完全满足这个概念。使用的基本概念被众多用例所继承。并且请停止错误地将任何程序或软件的使用视为超出 SOF 范围。 编程的线索和珍珠在于使用可用操作作为 API 的方式。 -
@AlekseyF。我绝不不同意调用函数是一种基本的编程结构,我也没有在我所做的评论中暗示这一点。我怀疑您的评论很大程度上是基于我的评论在之后修改的编辑问题,该评论现在包含一些 C# 代码,但完全错过了问题的上下文,即如何将 GhostScript 输出到网络位置并且实际上与它的名称无关。即使从命令行,它也不适用于 OP。
标签: c# pdf printing ghostscript