从 C# 使用 ReportViewer 打印 PDF windows

Printing PDF using ReportViewer from C# windows

这是我创建 PDF 的代码,它将打开 PDF 文档。

 public void createPDF(string Reportpath, ReportViewer RV)
        {
            Warning[] warnings;
            string[] streamids;
            string mimeType = string.Empty;
            string encoding = string.Empty;
            string extension = string.Empty;

            byte[] bytes = RV.LocalReport.Render("pdf", null, out mimeType, out encoding, out extension, out streamids, out warnings);
            try
            {
                FileStream fs = new FileStream(Reportpath, FileMode.Create);                    
                Thread.Sleep(1000);
                fs.Write(bytes, 0, bytes.Length);
                fs.Close();
                Thread.Sleep(1000);
                System.Diagnostics.Process.Start(Reportpath); 
            }
            catch (Exception ex)
            {
                MessageBox.Show("Report could not be created...\n" + ex.Message);
            }
        }

我需要使用 reportviewer 或任何其他打印 pdf 文档的方式直接打印 pdf,而不是打开它??。

我认为 this MSDN article 可以很好地解决您的问题

从以下内容中得到了一些想法link

http://www.codeproject.com/Tips/598424/How-to-Silently-Print-PDFs-using-Adobe-Reader-and

将 pdf 发送到 adobe reader 打印....

public static Boolean PrintPDFs(string pdfFileName)
        {
            try
            {
                Process proc = new Process();
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                proc.StartInfo.Verb = "print";

                //Define location of adobe reader/command line
                //switches to launch adobe in "print" mode
                proc.StartInfo.FileName = 
                  @"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe";
                proc.StartInfo.Arguments = String.Format(@"/p /h {0}", pdfFileName);
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.CreateNoWindow = true;

                proc.Start();
                proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                if (proc.HasExited == false)
                {
                    proc.WaitForExit(10000);
                }

                proc.EnableRaisingEvents = true;

                proc.Close();
                KillAdobe("AcroRd32");
                return true;
            }
            catch
            {
                return false;
            }
        }