首页 > 解决方案 > 如何在 MVC 4 中打印 HTML 字符串?

问题描述

我想用html制作发票,并想直接打印而不在对话框中预览。我创建了一个 ASCX 类型的部分视图,并在 MVC 的控制器中呈现为 HTML 字符串。现在我想打印这个 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();
}

标签: c#asp.net-mvc-4

解决方案


推荐阅读