好吧,我的目标是在不要求用户确认的情况下打印PDF文件。
我无法强迫用户使用特定的PDF阅读器(如Adobe Acrobat或Foxit)并需要打印文件没有任何用户互动。
我目前的代码如下:
String strFile = "pdf_file.pdf";
String strPrinter = "Printer Name";
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = strFile;
p.StartInfo.Arguments = strPrinter;
p.StartInfo.Verb = "PrintTo";
p.StartInfo.CreateNoWindow = true;
p.Start();
p.CloseMainWindow();
如果没有退出,我有一些代码可以杀死进程,但现在没关系
这段代码工作得很好,但是我无法得到过程中出现的错误消息
在这种情况下,try catch块无济于事,因为错误发生在进程“p”中,而不是在主进程中。
搜索网络我发现要恢复错误我需要设置以下内容:
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
// Start process, kill it, etc...
String s = p.StandardError.ReadToEnd();
但是应用此代码会给我另一个错误:该文件不是有效的win32应用程序
显然,我正在操作的文件是PDF文件,而不是EXE
有人知道另一种方法来恢复过程中发生的错误吗?
如找不到打印机等......
答案 0 :(得分:1)
如果我理解正确,您正尝试使用客户端计算机中安装的默认PDF阅读器打印PDF文件。
正如您所说,此代码试图实际运行.pdf文件。您可以使用C#PDF库,但我不知道它如何将原始PDF数据发送到打印机,因此我会尝试使用PDF命令行工具,将其放在项目的bin / Release文件夹中(以及bin / Debug,用于测试目的)然后使用命令行调用它。
如果您希望它完全透明且独立于PDF阅读器,也许您应该尝试一下。在命令行中,您明确告诉您要运行的可执行文件,因此它不会在屏幕上弹出Adobe Acrobat Reader,并且用户不会惊慌失措= D
以下是PDF打印机的示例: http://pdfbox.apache.org/commandline/#printPDF
命令行是:java -jar pdfbox-app-x.y.z.jar PrintPDF [OPTIONS] <inputfile>
它需要运行Java,如果这不是问题,你可以试试。您也可以搜索本机或.NET托管解决方案,我认为您有这个想法。
祝你好运!