获取PDF在后台以编程方式从控制台应用程序打印

时间:2013-04-09 05:47:17

标签: c# .net

如何以编程方式从打印机打印PDF文件? printout命令应在不弹出任何其他对话框的情况下执行。

我正在使用控制台应用程序,需要在不使用任何第三方库或工具的情况下执行此操作

2 个答案:

答案 0 :(得分:3)

与@Freelancer所写的一样,我使用以下方法,因为它使用Adobe的注册表设置来查找Acrobat reader可执行文件的路径,但它以静默方式打印到默认打印机:

private void PrintPdf(string fileName)
{
    var hkeyLocalMachine = Registry.LocalMachine.OpenSubKey(@"Software\Classes\Software\Adobe\Acrobat");
    if (hkeyLocalMachine != null)
    {
        var exe = hkeyLocalMachine.OpenSubKey("Exe");
        if (exe != null)
        {
            var acrobatPath = exe.GetValue(null).ToString();

            if (!string.IsNullOrEmpty(acrobatPath))
            {
                var process = new Process
                {
                    StartInfo =
                    {
                        UseShellExecute = false,
                        FileName = acrobatPath,
                        Arguments = string.Format(CultureInfo.CurrentCulture, "/T {0}", fileName)
                    }
                };

                process.Start();
            }
        }
    }
}

答案 1 :(得分:0)

.NET Framework提供System.Diagnostics命名空间中的类,可用于启动外部进程。我在几个项目中使用了以下代码来启动各种可执行文件,我们也可以用它来启动Adobe Acrobat Reader。

using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
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

您可以在此链接上关注此代码的所有讨论。

希望它有所帮助。