0

我想以表格格式获取所有学生信息,因此我创建了适当的视图。现在我可以制作该视图的 pdf 报告(通过将该视图传递给任何操作),它看起来与视图的外观完全相同???

4

1 回答 1

6

简短的回答并不容易,您可以使用 iTextSharp(在 NuGet 上可用)并尝试以下操作:

public EmptyResult CreatePdf()
{
    var document = new Document(PageSize.A4, 50, 50, 25, 25);

    // Create a new PdfWriter object, specifying the output stream
    var output = new MemoryStream();
    var writer = PdfWriter.GetInstance(document, output);

    // Open the Document for writing
    document.Open();

    var html = RenderRazorViewToString("PdfView", pdfViewModel);

    var worker = new HTMLWorker(document);

    var css = new StyleSheet();
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.BGCOLOR, "#616161");
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.COLOR, "#fff");
    css.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "verdana");
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.FONTWEIGHT, "bold");
    css.LoadStyle("even", "bgcolor", "#EEE");

    worker.SetStyleSheet(css);
    var stringReader = new StringReader(html);
    worker.Parse(stringReader);

    document.Close();

    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "PdfView.pdf");
    Response.BinaryWrite(output.ToArray());

    return new EmptyResult();
}

private string RenderRazorViewToString(string viewName, object model)
{
    ViewData.Model = model;
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}

您将需要摆弄样式和生成的 Html 以使其与 HtmlWorker 一起工作。

高温高压

于 2012-10-09T10:37:26.450 回答