4

如何将 webgrid 导出到 mvc .net Web 应用程序中的 .pdf 文件?

4

2 回答 2

1

这里有几种方法:

  • 您可以使用前面回复中提到的RazorPDF
  • 您可以使用Rotativa。运行速度非常快,但您需要权限才能在完全信任下运行服务器,因为 PDF 转换发生在可执行文件上
  • 您可以使用iTextSharp,这将是最难/最繁琐的实现,但同时您可以根据需要灵活地编写 PDF 文档

希望有帮助-

于 2013-06-24T17:15:44.860 回答
0

如需完整参考,请遵循 如何在 MVC4 应用程序中将 Webgrid 导出为 PDF

创建指向您的视图页面的操作链接

<div>
     Export Data : @Html.ActionLink("Export to PDF","GETPdf","Webgrid")
</div>

然后创建一个 MVC Action 用于将 webgrid 数据导出到 pdf 文件。这里 iTextSharp.dll 用于导出 pdf 文件。

public FileStreamResult GETPdf()
    {
        List<CustomerInfo> all = new List<CustomerInfo>();
        using (MyDatabaseEntities dc = new MyDatabaseEntities())
        {
            all = dc.CustomerInfoes.ToList();
        }

        WebGrid grid = new WebGrid(source: all, canPage: false, canSort: false);
        string gridHtml = grid.GetHtml(
                columns: grid.Columns(
                        grid.Column("CustomerID", "Customer ID"),
                        grid.Column("CustomerName", "Customer Name"),
                        grid.Column("Address", "Address"),
                        grid.Column("City", "City"),
                        grid.Column("PostalCode", "Postal Code")
                    )
                ).ToString();

        string exportData = String.Format("<html><head>{0}</head><body>{1}</body></html>", "<style>table{ border-spacing: 10px; border-collapse: separate; }</style>", gridHtml);
        var bytes = System.Text.Encoding.UTF8.GetBytes(exportData);
        using (var input = new MemoryStream(bytes))
        {
            var output = new MemoryStream();
            var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 50, 50);
            var writer = PdfWriter.GetInstance(document, output);
            writer.CloseStream = false;
            document.Open();

            var xmlWorker = iTextSharp.tool.xml.XMLWorkerHelper.GetInstance();
            xmlWorker.ParseXHtml(writer, document, input, System.Text.Encoding.UTF8);
            document.Close();
            output.Position = 0;
            return new FileStreamResult(output, "application/pdf");
        }
于 2015-11-30T16:16:23.367 回答