尝试打印pdf文件时出错

时间:2012-10-04 08:13:55

标签: c# .net acrobat

我试图使用控制台应用程序在后台打印pdf文档。我用这个过程来做。控制台应用程序将pdf文件发送到打印机,但在最小化模式下在后台打开的Adobe阅读器会抛出以下错误“打开此文档时出错。无法找到此文件”。由于多次打印,我无法杀死这个过程。是否有可能摆脱这个错误? 我的要求是使用进程打印pdf文件,同时这样做必须以最小化模式打开pdf文件,一旦完成打印,读取器需要自动关闭。我尝试了以下代码,但仍然抛出错误..

string file = "D:\\hat.pdf"; 
PrinterSettings ps = new PrinterSettings();
string printer = ps.PrinterName;
Process.Start(Registry.LocalMachine.OpenSubKe(@"SOFTWARE\Microsoft\Windows\CurrentVersion"+@"\App Paths\AcroRd32.exe").GetValue("").ToString(),string.Format("/h /t \"{0}\" \"{1}\"", file, printer));

1 个答案:

答案 0 :(得分:0)

由于您希望在打印文档时在后台打开Acrobat阅读器,您可以使用以下内容:

private static void RunExecutable(string executable, string arguments) 
{
   ProcessStartInfo starter = new ProcessStartInfo(executable, arguments);
   starter.CreateNoWindow = true;
   starter.RedirectStandardOutput = true;
   starter.UseShellExecute = false;

   Process process = new Process();
   process.StartInfo = starter;
   process.Start();

  StringBuilder buffer = new StringBuilder();
  using (StreamReader reader = process.StandardOutput) 
  {
    string line = reader.ReadLine();
    while (line != null) 
    {
      buffer.Append(line);
      buffer.Append(Environment.NewLine);
      line = reader.ReadLine();
      Thread.Sleep(100);
    }
  }
  if (process.ExitCode != 0) 
 {
    throw new Exception(string.Format(@"""{0}"" exited with ExitCode {1}. Output: {2}", 
executable, process.ExitCode, buffer.ToString());  
 }

}

您可以通过将上述代码合并到项目中并按如下方式使用来打印PDF:

string pathToExecutable = "c:\...\acrord32.exe";
RunExecutable(pathToExecutable, @"/t ""mytest.pdf"" ""My Windows PrinterName""");

此代码取自http://aspalliance.com/514_CodeSnip_Printing_PDF_from_NET.all

如果您不需要在后台打开Acrobat Reader,只需像任何其他文档一样打印pdf,您可以查看PrintDocument类:

http://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.print.aspx