Я хочу выставить счет в html и распечатать напрямую без предварительного просмотра в диалоговом окне.Я создал частичное представление типа ASCX и рендеринг в виде строки HTML в контроллере в MVC.Теперь я хочу напечатать вывод этой строки HTML.
Мой код такой:
public void Print(int saleId)
{
var doc = new PrintDocument();
PrinterSettings settings = new PrinterSettings();
string defaultPrinterName = settings.PrinterName;
doc.PrinterSettings.PrinterName = defaultPrinterName;
//doc.PrintPage += new PrintPageEventHandler(ProvideContent);
//doc.Print();
doc.PrintPage += (sender, args) => ProvideContent(saleId, args);
doc.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("PaperA0", 460, 480);
doc.Print();
}
public ActionResult ProvideContent(object sender, PrintPageEventArgs e)
{
string ret = RenderPartialToString("~/Areas/PointOfSale/Views/POSSaleItemUI/POSSaleItemReport.ascx", sender);
e.Graphics.DrawString(
ret,
new Font("Arial", 12),
Brushes.Black,
e.MarginBounds.Left,
e.MarginBounds.Top);
return View("test");
}
public static string RenderPartialToString(string controlName, object viewData)
{
ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };
viewPage.ViewData = new ViewDataDictionary(viewData);
viewPage.Controls.Add(viewPage.LoadControl(controlName));
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter tw = new HtmlTextWriter(sw))
{
viewPage.RenderControl(tw);
}
}
return sb.ToString();
}