C# - LPR命令打印PDF文件(C# - LPR Command to Print PDF F

2019-09-30 17:30发布

我试图运行LPR命令打印PDF文件。 我正在使用的代码正从Windows窗体应用程序的按钮点击执行。

码:

var command = @"lpr –S 192.168.1.245 –P DAILY C:\Test.pdf";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.RedirectStandardError = true;
procStartInfo.CreateNoWindow = true;

// start process
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();

proc.WaitForExit();

// read process output
string cmdError = proc.StandardError.ReadToEnd();
string cmdOutput = proc.StandardOutput.ReadToEnd();

该程序运行为x64的程序,所以它可以找到在C LPR程序:\ windows \ system32目录。

当代码执行错误字符串是空的,而输出字符串包含以下(相同的输出,如果该命令运行一直lpr /?

输出:

将打印作业发送到网络打印机

用法:LPR -S服务器-P打印机[-C类] [-J作业] [-o选项] [-x] [-d]的文件名

选项:-s服务器名称或主机上突发页-J工作职位名称使用提供打印队列-C级职位分类的LPD服务-P打印机名称打印突发页-o选项上的ip地址指示的类型该文件(默认假定一个文本文件)-x兼容性用的SunOS 4.1.x的和现有-d发送数据文件中的第一

如果我复制和粘贴准确的命令,因为它出现在代码并将其粘贴到一个命令行窗口,即使是相同的命令窗口打开的应用程序,它工作正常。

没有人有任何深入了解为什么这会发生? 提前致谢!

Answer 1:

我能弄明白。 如果它可以帮助其他人,这是工作的代码

var command = @"lpr -S 192.168.1.245 -P ""DAILY"" ""C:\Test.pdf""";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/C " + command);
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.RedirectStandardError = true;
procStartInfo.CreateNoWindow = true;

// start process
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();

proc.WaitForExit();

// read process output
string cmdError = proc.StandardError.ReadToEnd();
string cmdOutput = proc.StandardOutput.ReadToEnd();

请注意,队列名称和文件名用引号括起来。 我的另一个问题是,我最初是从电子邮件中复制的命令,因此破折号错了,我不得不删除和手动键入命令破折号它得到认可。 如果你看一下在原来的问题真的很近,可以看到仪表板稍长。

有关确保lpr命令可用,特别是如果你运行的是64位机上的32位应用程序的信息,请参阅以下引用。

参考文献1: lpr命令无法从我的C#程序在Win 7个工作

参考2: http://www.tomshardware.com/forum/240019-44-error-windows



文章来源: C# - LPR Command to Print PDF Files