Есть ли способ «распечатать» (с помощью кода c #) из приложения Asp.Net MVC, используя принтер (ы), установленный на сервере приложения? - PullRequest
0 голосов
/ 06 июня 2019

У моей компании есть собственный сервер, на котором мы установили несколько принтеров.Приложение Asp.Net MVC работает на том же сервере.У меня вопрос, как я могу печатать на одном из установленных принтеров на сервере ИЗ приложения?Я не хочу, чтобы запрос на печать исходил от клиента, а от хоста.

Я уже пробовал несколько вариантов кода с использованием классов «PrintServer» и «PrintQueue».Но я не могу заставить что-либо печатать удаленно, очередь печати не показывает активности после запуска программ.«Параметры» ниже - это различные способы, которыми я экспериментировал с ПОЛУЧЕНИЕМ списков принтеров, чтобы заполнить раскрывающийся список.Однако все, кроме варианта 4, получают только те принтеры, которые установлены локально.Мне нужен способ заполнить список установленных на сервере принтеров (готово, через опцию 4), затем выбрать этот принтер и иметь возможность печатать на нем (все еще загадка).

Заранее спасибо, друзья-рыцариКодекса!

И, пожалуйста, не будьте недобрыми.:)

// GET: View
public ActionResult Index()
{      
  //BEGIN PRINTING AREA...
  //THIS SECTION IS FOR GETTING A LIST OF PRINTERS TO PRINT FROM...
  //OPTION 1 PRINTING...
  List<SelectListItem> optOnePrinters = new List<SelectListItem>();
  var server = new PrintServer();
  var queues = server.GetPrintQueues(new[]
  { EnumeratedPrintQueueTypes.Shared, EnumeratedPrintQueueTypes.Connections });
  foreach (var item in queues)
  {
    if(!optOnePrinters.Any(a=>a.Text == item.FullName))
    {
      optOnePrinters.Add(new SelectListItem() { Text = item.FullName, Value = item.ShareName });
    }
  }
  ViewData["PrinterListOptOne"] = optOnePrinters;

  //OPTION 2 PRINTING...
  List<SelectListItem> optTwoPrinters = new List<SelectListItem>();
  foreach (string sPrinters in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
  {
    optTwoPrinters.Add(new SelectListItem() { Text=sPrinters, Value=sPrinters });
  }
  ViewData["PrinterListOptTwo"] = optTwoPrinters;

  //OPTION 3 PRINTING...
  List<SelectListItem> optThreePrinters = new List<SelectListItem>();
  System.Management.ManagementScope objMS =
      new System.Management.ManagementScope(ManagementPath.DefaultPath);
  objMS.Connect();

  SelectQuery objQuery = new SelectQuery("SELECT * FROM Win32_Printer");
  ManagementObjectSearcher objMOS = new ManagementObjectSearcher(objMS, objQuery);
  System.Management.ManagementObjectCollection objMOC = objMOS.Get();

  foreach (ManagementObject Printers in objMOC)
  {

    if (Convert.ToBoolean(Printers["Local"]))     // ALL LOCAL PRINTERS.
    {
      optThreePrinters.Add(new SelectListItem() { Text = Printers["DeviceID"] != null ? "(Local)" + (string)Printers["Name"] + ": " + (string)Printers["DeviceID"] : "(Local)" + (string)Printers["Name"], Value = (string)Printers["Name"] });
    }
    if (Convert.ToBoolean(Printers["Network"]))     // ALL NETWORK PRINTERS.
    {
      //Get list of Printer Properties...
      //foreach (PropertyData property in Printers.Properties)
      //{
      //  optThreePrinters.Add(new SelectListItem() { Text= property.Value == null ? property.Name : property.Name + ": " + property.Value.ToString(), Value=property.Value == null? property.Name: property.Value.ToString() });
      optThreePrinters.Add(new SelectListItem() { Text = "(Network)" + Printers["PortName"] !=null ? (string)Printers["Name"] + ": " + (string)Printers["PortName"] : (string)Printers["Name"], Value = (string)Printers["Name"] });
    }
  }
  ViewData["PrinterListOptThree"] = optThreePrinters;

  //OPTION 4 PRINTING...
  // Create a PrintServer
  // "theServer" must be a print server to which the user has full print access.
  List<SelectListItem> optFourPrinters = new List<SelectListItem>();

  PrintServer myPrintServer = new PrintServer(@"\\ServerName");
  // List the print server's queues
  PrintQueueCollection myPrintQueues = myPrintServer.GetPrintQueues();
  foreach (PrintQueue pq in myPrintQueues)
  {
    optFourPrinters.Add(new SelectListItem() { Text = pq.Name, Value = pq.Name });
  }
  ViewData["PrinterListOptFour"] = optFourPrinters;
  return View();
}

  //END PRINTING...

//BEGIN PRINT FUNCTIONS ON DropDown SELECT FROM VIEW...
public ActionResult Print(string PrinterName)
{
  Feedback f = new Feedback();
  PrintDocument doc = new PrintDocument();
  doc.PrinterSettings.PrinterName = PrinterName;
  doc.PrinterSettings.PrintFileName = "AEMSNet_TestPrint";
  doc.PrintPage += new PrintPageEventHandler(PrintHandler);
  doc.Print();

  f.Success = true;
  f.Type = FeedbackType.Success;
  f.SuccessMsg = "Successfully Printing!";
  return Json(f, JsonRequestBehavior.AllowGet);
}

private void PrintHandler(object sender, PrintPageEventArgs ppeArgs)
{      
  Font FontNormal = new Font("Verdana", 9);
  Graphics g = ppeArgs.Graphics;      
  g.DrawString("Greetings from the Home Controller.", FontNormal, Brushes.Black, new RectangleF(10.0F, 100.0F, 750.0F, 80.0F), new StringFormat());           
}
...