Kira
Kira

Reputation: 1207

Export a webgrid to pdf asp mvc razor

How to export a webgrid to a .pdf file in an mvc .net web application?

Upvotes: 4

Views: 1651

Answers (2)

Sourav Mondal
Sourav Mondal

Reputation: 435

For complete reference, please follow How to Export Webgrid to PDF in MVC4 Application

Create an action link to your view page

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

then create an MVC Action for export webgrid data to pdf file. Here iTextSharp.dll used for export pdf file.

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");
        }

Upvotes: 0

amhed
amhed

Reputation: 3659

Here's a couple of ways to do it:

  • You can use RazorPDF as mentioned in the previous response
  • You can use Rotativa. Which works very fast, but you need permissions to run the server on Full Trust, as the PDF transformation occurs on an executable file
  • You can use iTextSharp which would be the most difficult/cumbersome to implement, but at the same time you have all the flexibility to write the PDF document as you wish

Hope that helps-

Upvotes: 1

Related Questions