Как напечатать HTML-строку в MVC 4? - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу выставить счет в 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();
}
...