【问题标题】:Print PDF and reading the error output of the Process打印 PDF 并读取 Process 的错误输出
【发布时间】:2014-04-17 12:35:31
【问题描述】:

嗯,我的目标是在不要求用户确认的情况下打印 PDF 文件。
我不能强迫我的用户使用特定的 PDF 阅读器(例如 Adob​​e 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。

有谁知道另一种方法来恢复过程中发生的错误?
比如找不到打印机等...

【问题讨论】:

  • 对于初学者,您尝试将 PDF 文件作为可执行文件启动。 PDF 不可执行。
  • 这正是我在“显然,我正在打开的文件是 PDF 文件,而不是 EXE”中所说的。 p.StartInfo.UseShellExecute = true; 时效果很好

标签: c# pdf printing


【解决方案1】:

如果我理解正确,您正在尝试使用客户端计算机中安装的默认 PDF 阅读器打印 PDF 文件。

正如您所说,此代码正在尝试实际运行 .pdf 文件。您可以使用 C# PDF 库,但我不知道它将如何将原始 PDF 数据发送到打印机,所以我会尝试使用 PDF 命令行工具,将它放在项目的 bin/Release 文件夹中(以及bin/Debug,用于测试目的),然后使用命令行调用它。

如果您希望它完全透明且独立于 PDF 阅读器,也许您应该尝试一下。在命令行中,你明确地告诉你要运行什么可执行文件,这样它就不会让 Adob​​e Acrobat Reader 在屏幕上弹出,用户也不会吓坏 =D

以下是 PDF 打印机的示例: http://pdfbox.apache.org/commandline/#printPDF

命令行是:java -jar pdfbox-app-x.y.z.jar PrintPDF [OPTIONS] <inputfile>

它需要Java来运行,如果这不是问题,你可以试试。您还可以搜索本机或 .NET 托管解决方案,我想您明白了。

祝你好运!

【讨论】:

  • 好吧,我不能强迫用户在他们的机器上安装de Java,所以我搜索了this question,在哪里使用Ghostscript 软件进行静默打印。我会尝试这个软件,但我相信它会满足我的要求。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多