From 5a866435fb797fda0479278e4c51e23bee077ec5 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Wed, 9 Apr 2025 19:17:07 +0530 Subject: [PATCH 01/26] Documentation(951964) - Need to revamp pdf export in blazor grid --- blazor/datagrid/pdf-export.md | 443 +++++++++++++++++++++++++++++++--- 1 file changed, 414 insertions(+), 29 deletions(-) diff --git a/blazor/datagrid/pdf-export.md b/blazor/datagrid/pdf-export.md index 30915e747f..dfae9b6c09 100644 --- a/blazor/datagrid/pdf-export.md +++ b/blazor/datagrid/pdf-export.md @@ -7,61 +7,446 @@ control: DataGrid documentation: ug --- - +# Pdf export in Blazor Grid -# PDF Export in Blazor DataGrid Component +The PDF export feature in the Syncfusion Blazor Grid allows you to export grid data to a PDF document, providing the ability to generate printable reports or share data in a standardized format. -PDF export allows exporting DataGrid data to PDF document. You need to use the - **PdfExport** method for exporting. To enable PDF export in the datagrid, set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) as true. +To enable PDF export in the grid, you need to set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) property to **true** and use the **PdfExport** method for exporting. -To know about how to export blazor datagrid component to PDF document, you can check this video. +The following example demonstrates how to perform a PDF export action in the grid. -{% youtube "youtube:https://www.youtube.com/watch?v=HwERozt9fuY"%} +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Grids -```cshtml + + + + + + + + + + +@code { + private SfGrid DefaultGrid; + public List Orders { get; set; } + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname + { + await this.DefaultGrid.PdfExport(); + } + } + protected override void OnInitialized() + { + Orders = OrderDetails.GetAllRecords(); + } +} + +{% endhighlight %} +{% highlight c# tabtitle="OrderDetails.cs" %} + +public class OrderDetails +{ + public static List order = new List(); + public OrderDetails(int OrderID, string CustomerId, string ShipCity, string ShipName) + { + this.OrderID = OrderID; + this.CustomerID = CustomerId; + this.ShipCity = ShipCity; + this.ShipName = ShipName; + } + public static List GetAllRecords() + { + if (order.Count == 0) + { + order.Add(new OrderDetails(10248, "VINET", "Reims", "Vins et alcools Chevalier")); + order.Add(new OrderDetails(10249, "TOMSP", "Münster", "Toms Spezialitäten")); + order.Add(new OrderDetails(10250, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10251, "VICTE", "Lyon", "Victuailles en stock")); + order.Add(new OrderDetails(10252, "SUPRD", "Charleroi", "Suprêmes délices")); + order.Add(new OrderDetails(10253, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10254, "CHOPS", "Bern", "Chop-suey Chinese")); + order.Add(new OrderDetails(10255, "RICSU", "Genève", "Richter Supermarkt")); + order.Add(new OrderDetails(10256, "WELLI", "Resende", "Wellington Importadora")); + order.Add(new OrderDetails(10257, "HILAA", "San Cristóbal", "HILARION-Abastos")); + order.Add(new OrderDetails(10258, "ERNSH", "Graz", "Ernst Handel")); + order.Add(new OrderDetails(10259, "CENTC", "México D.F.", "Centro comercial Moctezuma")); + order.Add(new OrderDetails(10260, "OTTIK", "Köln", "Ottilies Käseladen")); + order.Add(new OrderDetails(10261, "QUEDE", "Rio de Janeiro", "Que Delícia")); + order.Add(new OrderDetails(10262, "RATTC", "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return order; + } + public int OrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/rDBIDpZEKtBzeKSd?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Show spinner while exporting + +Showing a spinner while exporting in the Syncfusion Blazor Grid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. + +To show or hide a spinner while exporting the grid, you can utilize the [ShowSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ShowSpinnerAsync) and [HideSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_HideSpinnerAsync) methods provided by the Grid within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. + +The `OnToolbarClick` event is triggered when a toolbar item in the Grid is clicked. Within the event handler, the code checks if the clicked **item** is related with PDF export, specifically the **Grid_pdfexport** item. If a match is found, the `ShowSpinnerAsync` method is used on the Grid instance to display the spinner. + +To hide the spinner after the exporting is completed, bind the [ExportComplete](https://blazor.syncfusion.com/documentation/datagrid/events#exportcomplete) event and use the `HideSpinnerAsync` method on the Grid instance to hide the spinner. + +The following example demonstrates how to show and hide the spinner during PDF export in a grid. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} @using Syncfusion.Blazor.Grids - - + + - - - - + + + + -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } +@code { + private SfGrid DefaultGrid; + public List Orders { get; set; } public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname { + await this.DefaultGrid.ShowSpinnerAsync(); await this.DefaultGrid.PdfExport(); } } + public async void ExportCompleteHandler(object args) + { + + await this.DefaultGrid.HideSpinnerAsync(); + } protected override void OnInitialized() { - Orders = Enumerable.Range(1, 75).Select(x => new Order() + Orders = OrderDetails.GetAllRecords(); + } +} + +{% endhighlight %} +{% highlight c# tabtitle="OrderDetails.cs" %} + +public class OrderDetails +{ + public static List order = new List(); + public OrderDetails(int OrderID, string CustomerId, string ShipCity, string ShipName) + { + this.OrderID = OrderID; + this.CustomerID = CustomerId; + this.ShipCity = ShipCity; + this.ShipName = ShipName; + } + public static List GetAllRecords() + { + if (order.Count == 0) { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); + order.Add(new OrderDetails(10248, "VINET", "Reims", "Vins et alcools Chevalier")); + order.Add(new OrderDetails(10249, "TOMSP", "Münster", "Toms Spezialitäten")); + order.Add(new OrderDetails(10250, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10251, "VICTE", "Lyon", "Victuailles en stock")); + order.Add(new OrderDetails(10252, "SUPRD", "Charleroi", "Suprêmes délices")); + order.Add(new OrderDetails(10253, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10254, "CHOPS", "Bern", "Chop-suey Chinese")); + order.Add(new OrderDetails(10255, "RICSU", "Genève", "Richter Supermarkt")); + order.Add(new OrderDetails(10256, "WELLI", "Resende", "Wellington Importadora")); + order.Add(new OrderDetails(10257, "HILAA", "San Cristóbal", "HILARION-Abastos")); + order.Add(new OrderDetails(10258, "ERNSH", "Graz", "Ernst Handel")); + order.Add(new OrderDetails(10259, "CENTC", "México D.F.", "Centro comercial Moctezuma")); + order.Add(new OrderDetails(10260, "OTTIK", "Köln", "Ottilies Käseladen")); + order.Add(new OrderDetails(10261, "QUEDE", "Rio de Janeiro", "Que Delícia")); + order.Add(new OrderDetails(10262, "RATTC", "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return order; } + public int OrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} - public class Order +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/rjVetptuKCqkceUU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Binding custom data source while exporting + +The Syncfusion Blazor Grid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the grid, which can be generated or retrieved based on your application logic. + +To export data, you need to define the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) object. This property represents the data source that will be used for the PDF export. + +The following example demonstrates how to render custom data source during PDF export. By utilizing the **PdfExport** method and passing the `PdfExportProperties` object through the grid instance, the grid data will be exported to a PDF using the dynamically defined data source. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Grids + + + + + + + + + + + +@code { + private SfGrid DefaultGrid; + public List Orders { get; set; } + public List newOrders { get; set; } + + private List ConvertToOrderDetails(List changes) { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } + return changes.Select(c => new OrderDetails(c.OrderID, c.CustomerID, c.ShipCity, c.ShipName)).ToList(); + } + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") // Id = Grid ID + _ + Toolbar Item Name + { + var convertedOrders = ConvertToOrderDetails(newOrders); + PdfExportProperties PdfProperties = new PdfExportProperties + { + DataSource = convertedOrders + }; + await this.DefaultGrid.PdfExport(PdfProperties); + } + } + protected override void OnInitialized() + { + Orders = OrderDetails.GetAllRecords(); + newOrders = ChangeData.GetAllRecords(); } } -``` + +{% endhighlight %} +{% highlight c# tabtitle="OrderDetails.cs" %} + +public class OrderDetails +{ + public static List order = new List(); + public OrderDetails(int OrderID, string CustomerId, string ShipCity, string ShipName) + { + this.OrderID = OrderID; + this.CustomerID = CustomerId; + this.ShipCity = ShipCity; + this.ShipName = ShipName; + } + public static List GetAllRecords() + { + if (order.Count == 0) + { + order.Add(new OrderDetails(10248, "VINET", "Reims", "Vins et alcools Chevalier")); + order.Add(new OrderDetails(10249, "TOMSP", "Münster", "Toms Spezialitäten")); + order.Add(new OrderDetails(10250, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10251, "VICTE", "Lyon", "Victuailles en stock")); + order.Add(new OrderDetails(10252, "SUPRD", "Charleroi", "Suprêmes délices")); + order.Add(new OrderDetails(10253, "HANAR", "Rio de Janeiro", "Hanari Carnes")); + order.Add(new OrderDetails(10254, "CHOPS", "Bern", "Chop-suey Chinese")); + order.Add(new OrderDetails(10255, "RICSU", "Genève", "Richter Supermarkt")); + order.Add(new OrderDetails(10256, "WELLI", "Resende", "Wellington Importadora")); + order.Add(new OrderDetails(10257, "HILAA", "San Cristóbal", "HILARION-Abastos")); + order.Add(new OrderDetails(10258, "ERNSH", "Graz", "Ernst Handel")); + order.Add(new OrderDetails(10259, "CENTC", "México D.F.", "Centro comercial Moctezuma")); + order.Add(new OrderDetails(10260, "OTTIK", "Köln", "Ottilies Käseladen")); + order.Add(new OrderDetails(10261, "QUEDE", "Rio de Janeiro", "Que Delícia")); + order.Add(new OrderDetails(10262, "RATTC", "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return order; + } + public int OrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} + +{% highlight c# tabtitle="ChangeData.cs" %} + +public class ChangeData +{ + public static List newOrders = new List(); + + public ChangeData(int OrderID, string CustomerId, string ShipCity, string ShipName) + { + this.OrderID = OrderID; + this.CustomerID = CustomerId; + this.ShipCity = ShipCity; + this.ShipName = ShipName; + } + + public static List GetAllRecords() + { + if (newOrders.Count == 0) + { + newOrders.Add(new ChangeData(20201, "BLAUS", "Madrid", "Blauer See Delikatessen")); + newOrders.Add(new ChangeData(20202, "FAMIA", "Sevilla", "Familia Arquibaldo")); + newOrders.Add(new ChangeData(20203, "GODOS", "Lisbon", "Godos Gourmet")); + newOrders.Add(new ChangeData(20204, "LINOD", "Porto", "Lino Delicias")); + newOrders.Add(new ChangeData(20205, "ALFKI", "Berlin", "Alfreds Futterkiste")); + newOrders.Add(new ChangeData(20206, "FRANK", "Paris", "Frankenversand")); + newOrders.Add(new ChangeData(20207, "LAMAI", "Milan", "La Maison du Délice")); + newOrders.Add(new ChangeData(20208, "TRADH", "Zürich", "Tradição Hipermercado")); + newOrders.Add(new ChangeData(20209, "WOLZA", "Hamburg", "Wolski Zajazd")); + newOrders.Add(new ChangeData(20210, "PICCO", "Naples", "Piccolo Ristorante")); + newOrders.Add(new ChangeData(20211, "BERGS", "Oslo", "Berglunds snabbköp")); + newOrders.Add(new ChangeData(20212, "BONAP", "Marseille", "Bon app'")); + newOrders.Add(new ChangeData(20213, "FOLKO", "Stockholm", "Folk och fä HB")); + newOrders.Add(new ChangeData(20214, "LEHMS", "Copenhagen", "Lehmanns Marktstand")); + newOrders.Add(new ChangeData(20215, "QUEEN", "London", "Queen Cozinha")); + } + return newOrders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/VXryXfDOqaghyKye?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Exporting with custom aggregate + +Custom aggregates in the Syncfusion Blazor Grid involves exporting grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. + +In order to utilize custom aggregation, you need to specify the [Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridAggregateColumn.html?_gl=1*n3kv9z*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDE5NjE5My4xMjAuMS4xNzQ0MTk3ODY5LjAuMC4w#Syncfusion_Blazor_Grids_GridAggregateColumn_Type) property as **Custom**. + +Within the **CustomAggregateFunction** function, it takes an input data that contains a result property. The function calculates the count of objects in this data where the **ShipCountry** field value is equal to **Brazil** and returns the count with a descriptive label. + +The following example shows how to export the grid with a custom aggregate that shows the calculation of the **Brazil** count of the **ShipCountry** column. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Grids + + + + + + + + + + @{ +
+

Brazil Count: @CustomAggregateFunction()

+
+ } +
+
+
+
+
+ + + + + + + +
+ +@code { + private SfGrid DefaultGrid; + public List OrderData { get; set; } + + protected override void OnInitialized() + { + OrderData = OrderDetails.GetAllRecords(); + } + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") // "Grid" + "_" + "Toolbar Item" + { + await DefaultGrid.PdfExport(); + } + } + + private int CustomAggregateFunction() + { + return OrderData.Count(x => x.ShipCountry.Contains("Brazil")); + } + + public void PdfAggregateTemplateInfoHandler(PdfAggregateEventArgs args) + { + if (args.Column.Field == "ShipCountry") + { + args.Cell.Value = $"Brazil Count: {CustomAggregateFunction()}"; + } + } +} + +{% endhighlight %} +{% highlight c# tabtitle="OrderDetails.cs" %} + +public class OrderDetails +{ + public static List Order = new List(); + public OrderDetails(int OrderID, string CustomerId, double Freight, string ShipCountry) + { + this.OrderID = OrderID; + this.CustomerID = CustomerId; + this.Freight = Freight; + this.ShipCountry = ShipCountry; + } + public static List GetAllRecords() + { + if (Order.Count == 0) + { + Order.Add(new OrderDetails(10248, "VINET", 32.38, "France")); + Order.Add(new OrderDetails(10249, "TOMSP", 11.61, "Germany")); + Order.Add(new OrderDetails(10250, "HANAR", 65.83, "Brazil")); + Order.Add(new OrderDetails(10251, "VICTE", 41.34, "France")); + Order.Add(new OrderDetails(10252, "SUPRD", 51.3, "Belgium")); + Order.Add(new OrderDetails(10253, "HANAR", 58.17, "Brazil")); + Order.Add(new OrderDetails(10254, "CHOPS", 22.98, "Switzerland")); + Order.Add(new OrderDetails(10255, "RICSU", 148.33, "Switzerland")); + Order.Add(new OrderDetails(10256, "WELLI", 13.97, "Brazil")); + Order.Add(new OrderDetails(10257, "HILAA", 81.91, "Venezuela")); + Order.Add(new OrderDetails(10258, "ERNSH", 140.51, "Austria")); + Order.Add(new OrderDetails(10259, "CENTC", 3.25, "Mexico")); + Order.Add(new OrderDetails(10260, "OTTIK", 55.09, "Germany")); + Order.Add(new OrderDetails(10261, "QUEDE", 3.05, "Brazil")); + Order.Add(new OrderDetails(10262, "RATTC", 48.29, "USA")); + } + return Order; + } + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCountry { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/hNrINftYJMQFuKca?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} - -## To customize PDF export - -PDF export provides an option to customize mapping of datagrid to exported PDF document. - -### File name for exported document - -You can assign the file name for the exported document by defining **fileName** property in **PdfExportProperties**. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.FileName = "test.pdf"; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - - - - - -### To add header and footer - -You can customize text, page number, line, page size and changing orientation in header and footer of the exported document. - -#### How to add a text in header/footer - -You can add text and customize its styles either in Header or Footer of exported PDF document using [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Header) and [Footer](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Footer) properties of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -The following sample code demonstrates adding text and customizing its styles in the Header section of the exported document, - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public List HeaderContent = new List -{ - new PdfHeaderFooterContent() { Type = ContentType.Text, Value = "Northwind Traders", Position = new PdfPosition() { X = 0, Y = 50 }, Style = new PdfContentStyle() { TextBrushColor = "#000000", FontSize = 13 } } - }; - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfHeader Header = new PdfHeader() - { - FromTop = 0, - Height = 130, - Contents = HeaderContent - }; - - ExportProperties.Header = Header; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -#### How to draw a line in header/footer - -You can add line either in the Header or Footer area of the exported PDF document using [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Header) and [Footer](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Footer) properties of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -Supported line styles are, - -* Dash -* Dot -* DashDot -* DashDotDot -* Solid - -The following sample code demonstrates adding line in the Header section of the exported document, - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public List HeaderContent = new List - { - new PdfHeaderFooterContent() { Type = ContentType.Line, Points = new PdfPoints() { X1 = 0, Y1 = 4, X2 = 685, Y2 = 4 }, Style = new PdfContentStyle() { PenColor = "#000080", DashStyle = PdfDashStyle.Solid } } - }; - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfHeader Header = new PdfHeader() - { - FromTop = 0, - Height = 130, - Contents = HeaderContent - }; - - ExportProperties.Header = Header; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -#### How to add repeat headers in PDF Export - -You can add headers for every page of PDF exported document by enabling [IsRepeatHeader](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_IsRepeatHeader) property of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.IsRepeatHeader = true; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -#### How to export the Grid with specific columns - -You can export the PDF grid with specific columns instead of all columns which are defined in the Grid definition. To achieve this scenario by using [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - List ExportColumns = new List(); -#pragma warning disable BL0005 - ExportColumns.Add(new GridColumn() { Field = "CustomerID", HeaderText = "Customer Name", Width = "100" }); - ExportColumns.Add(new GridColumn() { Field = "OrderDate", HeaderText = "Date", Width = "120", Format = "d" }); - ExportColumns.Add(new GridColumn() { Field = "Freight", HeaderText = "Freight", Width = "120", Format = "C2", TextAlign = TextAlign.Right }); -#pragma warning restore BL0005 - ExportProperties.Columns = ExportColumns; - - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -#### Add page number in header/footer - -You can add page number either in Header or Footer area of exported PDF document using [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Header) and [Footer](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Footer) properties of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -Supported page number types are, - -* LowerLatin - a, b, c, -* UpperLatin - A, B, C, -* LowerRoman - i, ii, iii, -* UpperRoman - I, II, III, -* Number - 1,2,3. - -The following sample code demonstrates adding page number in the Header section of the exported document, - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public List HeaderContent = new List -{ - new PdfHeaderFooterContent() { Type = ContentType.PageNumber, PageNumberType = PdfPageNumberType.Arabic, Position = new PdfPosition() { X = 0, Y = 25 }, Style = new PdfContentStyle() { TextBrushColor = "#0000ff", FontSize = 12, HAlign = PdfHorizontalAlign.Center } } - }; - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfHeader Header = new PdfHeader() - { - FromTop = 0, - Height = 130, - Contents = HeaderContent - }; - - ExportProperties.Header = Header; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -#### Insert an image in header/footer - -Image (Base64 string) can be added in header/footer area of the exported PDF document using [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Header) and [Footer](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Footer) properties of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. - -The following sample code demonstrates inserting image in the Header section of the exported document, - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public List HeaderContent = new List - { - new PdfHeaderFooterContent() { Type = ContentType.Image, Src = "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", Position = new PdfPosition() { X = 40, Y = 10 }, Size = new PdfSize() { Height = 100, Width = 250 } } - }; - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfHeader Header = new PdfHeader() - { - FromTop = 0, - Height = 130, - Contents = HeaderContent - }; - - ExportProperties.Header = Header; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### How to change page orientation - -Page orientation can be changed Landscape(Default Portrait) for the exported document using the export properties. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.PageOrientation = Syncfusion.Blazor.Grids.PageOrientation.Landscape; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### How to change page size - -Page size can be customized for the exported document using the export properties. - -Supported page sizes are: - -* Letter -* Note -* Legal -* A0 -* A1 -* A2 -* A3 -* A5 -* A6 -* A7 -* A8 -* A9 -* B0 -* B1 -* B2 -* B3 -* B4 -* B5 -* Archa -* Archb -* Archc -* Archd -* Arche -* Flsa -* HalfLetter -* Letter11x17 -* Ledger - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.PageSize = PdfPageSize.Letter; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Export current page - -PDF export provides an option to export the current page into PDF. To export current page, define the **exportType** to **CurrentPage**. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.ExportType = ExportType.CurrentPage; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Export hidden columns - -PDF export provides an option to export hidden columns of DataGrid by defining the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_IncludeHiddenColumn) as **true**. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.IncludeHiddenColumn = true; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Export the selected records only - -The Grid has an option to export the selected records in a pdf exported document. This can be achieved by using the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class and the [GetSelectedRecordsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetSelectedRecordsAsync) method of the Grid. - -In the following sample, selected records will be gotten from the `GetSelectedRecordsAsync` method and provided to the` DataSource` property of `PdfExportProperties`. Then pass this PdfExportProperties class to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_System_Nullable_System_Boolean__System_Object_System_Nullable_System_Boolean__) method to get the selected records in the exported document. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - public async Task OnToolbarClick(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties PdfProperties = new PdfExportProperties(); - var selectedRecord = await DefaultGrid.GetSelectedRecordsAsync(); - if(selectedRecord.Count() > 0) - { - PdfProperties.DataSource = selectedRecord; - } - else - { - PdfProperties.DataSource = Orders; - } - await this.DefaultGrid.ExportToPdfAsync(PdfProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 15).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - ShipCountry = (new string[] { "Germany", "UK", "USA", "Italy", "France" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public string ShipCountry { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Theme - -PDF export provides an option to include theme for exported PDF document. - -To apply theme in exported PDF, define the **theme** in export properties. - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfTheme Theme = new PdfTheme(); - - PdfBorder HeaderBorder = new PdfBorder(); - HeaderBorder.Color = "#64FA50"; - - PdfThemeStyle HeaderThemeStyle = new PdfThemeStyle() - { - FontColor = "#64FA50", - FontName = "Calibri", - FontSize = 17, - Bold = true, - Border = HeaderBorder - }; - Theme.Header = HeaderThemeStyle; - - PdfThemeStyle RecordThemeStyle = new PdfThemeStyle() - { - FontColor = "#64FA50", - FontName = "Calibri", - FontSize = 17 - - }; - Theme.Record = RecordThemeStyle; - - PdfThemeStyle CaptionThemeStyle = new PdfThemeStyle() - { - FontColor = "#64FA50", - FontName = "Calibri", - FontSize = 17, - Bold = true - - }; - Theme.Caption = CaptionThemeStyle; - - ExportProperties.Theme = Theme; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -N> By default, material theme is applied to exported PDF document. - -### Customize column width in exported PDF document - -The PDF export provides an option to customize the column being exported to a PDF format using the [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. While defining the column, we can change its width as per the requirement. - -In the following code sample, we have customized the column width for the PDF exported grid by enabling the [DisableAutoFitWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DisableAutoFitWidth) property of the `PdfExportProperties` class. - -```cshtml -@using Syncfusion.Blazor.Buttons -@using Syncfusion.Blazor.Grids - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } - public async Task PdfExport() - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.DisableAutoFitWidth = true; - ExportProperties.Columns = new List() - { - new GridColumn(){ Field="OrderID", HeaderText="Order ID", TextAlign=TextAlign.Left, Width="300"}, - new GridColumn(){ Field="CustomerID", HeaderText="Customer Name", TextAlign=TextAlign.Left, Width="100"}, - new GridColumn(){ Field="OrderDate", HeaderText=" Order Date", Type=ColumnType.Date, Format="d", TextAlign=TextAlign.Left, Width="80"} - }; - await this.DefaultGrid.PdfExport(ExportProperties); - } -} - -``` - -N> You can find the fully working sample [here](https://github.com/SyncfusionExamples/blazor-datagrid-customize-column-in-pdf-exported-document). - -### Grid cell customization in PDF export - -DataGrid has support to customize the column header and content styles, such as changing text orientation, the font color, the width of the header and content text, and so on in the exported PDF file. To achieve this requirement, define the `BeginCellLayout` event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) with an event handler to perform the required action. - -The [PdfHeaderQueryCellInfoEvent](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfHeaderQueryCellInfoEvent) will be triggered when creating a column header for the pdf document to be exported. Collect the column header details in this event and handle the custom in the `BeginCellLayout` event handler. - -In the following demo, the [DrawString](https://help.syncfusion.com/cr/file-formats/Syncfusion.Pdf.Graphics.PdfGraphics.html#Syncfusion_Pdf_Graphics_PdfGraphics_DrawString_System_String_Syncfusion_Pdf_Graphics_PdfFont_Syncfusion_Pdf_Graphics_PdfBrush_System_Drawing_PointF_) method from the [Graphics](https://help.syncfusion.com/cr/file-formats/Syncfusion.Pdf.Graphics.PdfGraphics.html) is used to rotate the header text of the column header inside the `BeginCellLayout` event handler. - -```cshtml -@using Syncfusion.Blazor.Grids -@using Syncfusion.Pdf.Graphics -@using Syncfusion.PdfExport -@using System.Drawing -@using Syncfusion.Pdf - - - - - - - - - - - - -@code{ - public SfGrid DefaultGrid; - public List Orders { get; set; } - List headerValues = new List(); - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") // Id is combination of Grid's ID and itemname. - { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.BeginCellLayout = new PdfGridBeginCellLayoutEventHandler(BeginCellEvent); - ExportProperties.FileName = "test.pdf"; - ExportProperties.IsRepeatHeader = true; - await this.DefaultGrid.PdfExport(ExportProperties); - } - } - - public void BeginCellEvent(object sender, PdfGridBeginCellLayoutEventArgs args) - { - PdfGrid grid = (PdfGrid)sender; - var brush = new Syncfusion.PdfExport.PdfSolidBrush(new Syncfusion.PdfExport.PdfColor(Color.DimGray)); - args.Graphics.Save(); - args.Graphics.TranslateTransform(args.Bounds.X + 50, args.Bounds.Height + 40); - args.Graphics.RotateTransform(-60); - // Draw the text at particular bounds. - args.Graphics.DrawString(headerValues[args.CellIndex], new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 10), brush, new PointF(0, 0)); - if (args.IsHeaderRow) - { - grid.Headers[0].Cells[args.CellIndex].Value = string.Empty; - } - args.Graphics.Restore(); - } - - public void PdfHeaderQueryCellInfoHandler(PdfHeaderQueryCellInfoEventArgs args) - { - headerValues.Add(args.Column.HeaderText); - var longestString = headerValues.Where(s => s.Length == headerValues.Max(m => m.Length)). - First(); - Syncfusion.PdfExport.PdfFont font = new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 6); - SizeF size = font.MeasureString(longestString); - args.PdfGridColumn.Grid.Headers[0].Height = size.Width * 2; - } - - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} - - -``` - -![PDF Exported Grid Cell Customization in Blazor DataGrid](./images/blazor-datagrid-pdf-exported-grid-cell-customization.png) - - - -## Custom data source - -PDF export provides an option to define the datasource dynamically before exporting. To export data dynamically, define it in the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property of the [PdfExportProperties](https://help.syncfusion.com/cr/aspnetcore-blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class - -The following sample code demonstrates dynamically modifying the data source before exporting it, - -```cshtml -@using Syncfusion.Blazor.Grids - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - PdfExportProperties PdfProperties = new PdfExportProperties(); - PdfProperties.DataSource = Orders; - await this.DefaultGrid.PdfExport(PdfProperties); - } - } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -## Exporting Grid Data as Stream - -### Exporting Grid Data as Memory Stream -This section shows how to invoke a [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToExcelAsync_System_Int32_System_Int32_System_Int32_) method to export a pdf document as a memory stream. - -To obtain the export file as a memory stream, set the `asMemoryStream` parameter to true within the `ExportToPdfAsync` method. - -The provided example showcases the process of exporting the file as a memory stream and sending the byte to initiate a browser download. - -**Step 1**: **Create a JavaScript file to execute browser downloads and copy the code below** - -```cshtml -function saveAsFile(filename, bytesBase64) { - var link = document.createElement('a'); - link.download = filename; - link.href = "data:application/octet-stream;base64," + bytesBase64; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -} -``` -**Step 2**: **Invoke the JavaScript file to carry out browser downloads using the memory stream** - - ```cshtml -@using Syncfusion.Blazor.Grids -@using System.IO; -@using Syncfusion.Pdf -@using Syncfusion.XlsIO -@using Syncfusion.PdfExport; -@using Syncfusion.ExcelExport; -@inject IJSRuntime JSRuntime - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - MemoryStream streamDoc = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); - await JSRuntime.InvokeVoidAsync("saveAsFile", new object[] {"PdfMemoryStream.pdf", Convert.ToBase64String(streamDoc.ToArray()), true }); - } - } - public List GetAllRecords() - { - List data = new List(); - int count = 1000; - for (int i = 0; i < 15; i++) - { - data.Add(new Order() { OrderID = count + 1, CustomerID = "ALFKI", OrderDate = new DateTime(1995, 05, 15), Freight = 25.7 * 2 }); - data.Add(new Order() { OrderID = count + 2, CustomerID = "ANANTR", OrderDate = new DateTime(1994, 04, 04), Freight = 26.7 * 2 }); - data.Add(new Order() { OrderID = count + 3, CustomerID = "BLONP", OrderDate = new DateTime(1993, 03, 10), Freight = 27.7 * 2 }); - data.Add(new Order() { OrderID = count + 4, CustomerID = "ANTON", OrderDate = new DateTime(1992, 02, 14), Freight = 28.7 * 2 }); - data.Add(new Order() { OrderID = count + 5, CustomerID = "BOLID", OrderDate = new DateTime(1991, 01, 18), Freight = 29.7 * 2 }); - count += 5; - } - return data; - } - protected override void OnInitialized() - { - Orders = GetAllRecords(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Converting Memory Stream to File Stream for PDF Export - -This section explains the process of converting a memory stream obtained from the `ExportToPdfAsync` method into a file stream to export pdf document. - -To know about exporting Blazor DataGrid as a Stream to a PDF document in Blazor DataGrid Component, you can check this video. - -{% youtube "youtube:https://www.youtube.com/watch?v=H5rqB_hBpUM"%} - -The example provided demonstrates this process of exporting the pdf document from the file stream. - -```cshtml -@using Syncfusion.Blazor.Grids -@using System.IO; -@using Syncfusion.Pdf -@using Syncfusion.XlsIO -@using Syncfusion.PdfExport; -@using Syncfusion.ExcelExport; -@inject IJSRuntime JSRuntime - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - //Memory stream to file stream exporting - MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); - - //Create a copy of streamDoc1 - MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); - //For creating the exporting location with file name, for this need to specify the physical exact path of the file - string filePaths = "C:Users/abc/Downloads/SampleTestPdf.pdf"; - - // Create a FileStream to write the moryStream contents to a file - using (FileStream fileStream = File.Create(filePaths)) - { - // Copy the MemoryStream data to the FileStream - copyOfStreamDoc1.CopyTo(fileStream); - } - } - } - public List GetAllRecords() - { - List data = new List(); - int count = 1000; - for (int i = 0; i < 15; i++) - { - data.Add(new Order() { OrderID = count + 1, CustomerID = "ALFKI", OrderDate = new DateTime(1995, 05, 15), Freight = 25.7 * 2 }); - data.Add(new Order() { OrderID = count + 2, CustomerID = "ANANTR", OrderDate = new DateTime(1994, 04, 04), Freight = 26.7 * 2 }); - data.Add(new Order() { OrderID = count + 3, CustomerID = "BLONP", OrderDate = new DateTime(1993, 03, 10), Freight = 27.7 * 2 }); - data.Add(new Order() { OrderID = count + 4, CustomerID = "ANTON", OrderDate = new DateTime(1992, 02, 14), Freight = 28.7 * 2 }); - data.Add(new Order() { OrderID = count + 5, CustomerID = "BOLID", OrderDate = new DateTime(1991, 01, 18), Freight = 29.7 * 2 }); - count += 5; - } - return data; - } - protected override void OnInitialized() - { - Orders = GetAllRecords(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -### Merging Two PDF Memory Streams - -This section explains the process of combining two memory stream files and exporting the resulting merged file as a PDF document. To accomplish this, you can use the PDF documents [Merge](https://help.syncfusion.com/cr/file-formats/Syncfusion.Pdf.PdfDocumentBase.html#Syncfusion_Pdf_PdfDocumentBase_Merge_Syncfusion_Pdf_PdfDocumentBase_Syncfusion_Pdf_Parsing_PdfLoadedDocument_) method available in the [PdfDocumentBase](https://help.syncfusion.com/cr/file-formats/Syncfusion.Pdf.PdfDocumentBase.html) class, class. To achieve this functionality, you can utilize the [Syncfusion.Blazor.Pdf](https://www.nuget.org/packages/Syncfusion.Pdf.Net.Core/) package. - -The provided example demonstrates the merging of two memory streams and exporting the resulting merged memory stream for browser download. - -In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal grid memory stream, while streamDoc2 contains the memory stream of a customized grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines these streams into a new PDF document, converting it into a memory stream. This merged memory stream is then utilized to initiate the browser download. - - ```cshtml -@using Syncfusion.Blazor.Grids -@using System.IO; -@using Syncfusion.PdfExport; -@using Syncfusion.Pdf -@inject IJSRuntime JSRuntime - - - - - - - - - - - -@code{ - private SfGrid DefaultGrid; - public List Orders { get; set; } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) - { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname - { - //Merging two memory stream - MemoryStream mergedStream = new MemoryStream(); - - //Creates a PDF document. - Syncfusion.Pdf.PdfDocument finalDoc = new Syncfusion.Pdf.PdfDocument(); - MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); - //Create a copy of streamDoc1 to access the memory stream - MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); - - //Customized grid for memory stream export - PdfExportProperties ExportProperties = new PdfExportProperties(); - PdfTheme Theme = new PdfTheme(); - PdfBorder HeaderBorder = new PdfBorder(); - HeaderBorder.Color = "#000000"; - - PdfThemeStyle HeaderThemeStyle = new PdfThemeStyle() - { - FontColor = "#6A5ACD", - FontName = "Comic Sans MS", - FontSize = 17, - Bold = true, - Border = HeaderBorder - }; - Theme.Header = HeaderThemeStyle; - - PdfThemeStyle RecordThemeStyle = new PdfThemeStyle() - { - FontColor = "#800080", - FontName = "Comic Sans MS", - FontSize = 14, - Border = HeaderBorder - }; - Theme.Record = RecordThemeStyle; - - ExportProperties.Theme = Theme; - MemoryStream streamDoc2 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true, ExportProperties); - //Create a copy of streamDoc2 to access the memory stream - MemoryStream copyOfStreamDoc2 = new MemoryStream(streamDoc2.ToArray()); - - //Creates a PDF stream for merging. - Stream[] streams = { copyOfStreamDoc1, copyOfStreamDoc2 }; - Syncfusion.Pdf.PdfDocument.Merge(finalDoc, streams); - finalDoc.Save(mergedStream); - await JSRuntime.InvokeVoidAsync("saveAsFile", new object[] { "MemoryStreamMerge.pdf", Convert.ToBase64String(mergedStream.ToArray()), true }); - } - } - public List GetAllRecords() - { - List data = new List(); - int count = 1000; - for (int i = 0; i < 15; i++) - { - data.Add(new Order() { OrderID = count + 1, CustomerID = "ALFKI", OrderDate = new DateTime(1995, 05, 15), Freight = 25.7 * 2 }); - data.Add(new Order() { OrderID = count + 2, CustomerID = "ANANTR", OrderDate = new DateTime(1994, 04, 04), Freight = 26.7 * 2 }); - data.Add(new Order() { OrderID = count + 3, CustomerID = "BLONP", OrderDate = new DateTime(1993, 03, 10), Freight = 27.7 * 2 }); - data.Add(new Order() { OrderID = count + 4, CustomerID = "ANTON", OrderDate = new DateTime(1992, 02, 14), Freight = 28.7 * 2 }); - data.Add(new Order() { OrderID = count + 5, CustomerID = "BOLID", OrderDate = new DateTime(1991, 01, 18), Freight = 29.7 * 2 }); - count += 5; - } - return data; - } - protected override void OnInitialized() - { - Orders = GetAllRecords(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - } -} -``` - -## See also - -* [Export Blazor Datagrid with Barcode to PDF](https://www.syncfusion.com/forums/175315/export-datagrid-with-barcode) - - -N> You can refer to our [Blazor DataGrid](https://www.syncfusion.com/blazor-components/blazor-datagrid) feature tour page for its groundbreaking feature representations. You can also explore our [Blazor DataGrid example](https://blazor.syncfusion.com/demos/datagrid/overview?theme=bootstrap5) to understand how to present and manipulate data. +{% previewsample "https://blazorplayground.syncfusion.com/embed/LjVSNfWZIXZQsIfM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} \ No newline at end of file From 037e29cdab919147d21b379f19c22dee45c65b47 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Thu, 17 Apr 2025 12:07:33 +0530 Subject: [PATCH 05/26] Added the server topic in pdf-export-option --- blazor/datagrid/pdf-export-options.md | 455 ++++++++++++++++++++++++-- 1 file changed, 426 insertions(+), 29 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index c3d3ea2246..e3a1eb7b17 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1,7 +1,7 @@ --- layout: post -title: Pdf Export in Blazor DataGrid | Syncfusion -description: Checkout and learn here all about Pdf Export in Syncfusion Blazor DataGrid and much more. +title: Pdf Export Options in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Pdf Export Options in Syncfusion Blazor DataGrid and much more. platform: Blazor control: DataGrid documentation: ug @@ -34,8 +34,7 @@ The following example demonstrates how to export current page to a PDF document - + @@ -166,7 +165,6 @@ The following example demonstrates how to export the selected records to a PDF d private SfGrid Grid; public List Orders { get; set; } - protected override void OnInitialized() { Orders = OrderData.GetAllRecords(); @@ -177,12 +175,10 @@ The following example demonstrates how to export the selected records to a PDF d if (args.Item.Id == "Grid_pdfexport") { var selectedRecords = await Grid.GetSelectedRecordsAsync(); - PdfExportProperties exportProperties = new PdfExportProperties { DataSource = selectedRecords }; - await this.Grid.ExportToPdfAsync(exportProperties); } } @@ -364,8 +360,7 @@ The following example demonstrates how to export hidden columns to a PDF file. I - + @@ -464,7 +459,7 @@ To show or hide columns based on user interaction during the export process, you 1. Handle the [ToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event of the Grid. -2. Update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible)) property of the column to **true** or **false**. +2. Update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property of the column to **true** or **false**. 3. Export the Grid to PDF. @@ -477,8 +472,7 @@ In the following example, the **CustomerID** is initially a hidden column in the @using Syncfusion.Blazor.Grids - + @@ -506,7 +500,7 @@ Toolbar="@(new List() { "Pdfexport" })" Height="348"> { CustomerIDVisible = true; ShipCityVisible=false; - await Grid.ExportToExcelAsync(); + await Grid.ExportToPdfAsync(); } } @@ -590,8 +584,7 @@ The following example demonstrates how to export the Grid into PDF document by s @using Syncfusion.Blazor.Grids - + @@ -730,8 +723,7 @@ The following example demonstrates how to export the Grid into PDF document by s - + @@ -783,7 +775,6 @@ The following example demonstrates how to export the Grid into PDF document by s { PageSize = Enum.TryParse(SelectedPageSize, out var size) ? size : PdfPageSize.A4 }; - await Grid.ExportToPdfAsync(exportProps); } } @@ -1089,8 +1080,6 @@ The following example demonstrates how to customize the Grid columns when export { if (args.Item.Id == "Grid_pdfexport") { - - List ExportColumns = new List(); ExportColumns.Add(new GridColumn() { Field = "OrderID", HeaderText = "Order Number", Width = "120" }); ExportColumns.Add(new GridColumn() { Field = "CustomerID", HeaderText = "Customer Name", Width = "120" }); @@ -1100,7 +1089,6 @@ The following example demonstrates how to customize the Grid columns when export { Columns = ExportColumns }; - await Grid.ExportToPdfAsync(exportProperties); } } @@ -1204,10 +1192,8 @@ The following example demonstrates, how to change the default font when exportin @code { - private SfGrid Grid; - public List Orders { get; set; } public string fontFamily { get; set; } = "TimesRoman"; public string[] Initial = (new string[] { "CustomerID", "ShipCity" }); @@ -1216,7 +1202,6 @@ The following example demonstrates, how to change the default font when exportin Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { if (args.Item.Id == "Grid_pdfexport") @@ -1246,7 +1231,6 @@ The following example demonstrates, how to change the default font when exportin } } }; - await Grid.ExportToPdfAsync(exportProps); } } @@ -1346,8 +1330,6 @@ The following example demonstrates how to use the custom **Algeria** font for ex Orders = OrderData.GetAllRecords(); } - - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { if (args.Item.Id == "Grid_pdfexport") @@ -1377,7 +1359,6 @@ The following example demonstrates how to use the custom **Algeria** font for ex } } }; - await Grid.ExportToPdfAsync(exportProps); } } @@ -1437,4 +1418,420 @@ public class OrderData {% endhighlight %} {% endtabs %} -![Add custom font](./images/Add-custom-font.png) \ No newline at end of file +![Add custom font](./images/Add-custom-font.png) + +## Exporting Grid Data as Stream + +The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. + +### Exporting Grid Data as Memory Stream + +The Export to Memory Stream feature allows you to export data from a Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. + +To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an Pdf workbook as a memory stream, which can then be sent to the browser for download. + +The provided example showcases the process of exporting the file as a memory stream and sending the byte to initiate a browser download. + +**Step 1**: **Add JavaScript for File Download** + +Create a JavaScript file named **saveAsFile.js** under the **wwwroot/scripts** directory and include the following function to trigger browser download: + +{% tabs %} +{% highlight razor tabtitle="saveAsFile.js" %} + +function saveAsFile(filename, bytesBase64) { + var link = document.createElement('a'); + link.download = filename; + link.href = "data:application/octet-stream;base64," + bytesBase64; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +} + +{% endhighlight %} +{% endtabs %} + +**Step 2**:**Register the JavaScript file** + +Include the script reference inside your **App.razor** (or **index.html** in Blazor WebAssembly): + +{% tabs %} +{% highlight razor tabtitle="App.razor" %} + + + + + + + + + + + + + + + + + + + + + + +{% endhighlight %} +{% endtabs %} + +**Step 3: Invoke the JavaScript function to perform the browser download using the memory stream** + +In the **Index.razor** file, the Grid is set up, the export operation is triggered, and the `saveAsFile` function is invoked to handle the browser download. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Grids +@using System.IO; +@using Syncfusion.Pdf +@using Syncfusion.XlsIO +@using Syncfusion.PdfExport; +@inject IJSRuntime JSRuntime + + + + + + + + + + + + +@code{ + private SfGrid Grid; + public List Orders { get; set; } + + protected override void OnInitialized() + { + Orders = OrderData.GetAllRecords(); + } + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. + { + MemoryStream streamDoc = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); + await JSRuntime.InvokeVoidAsync("saveAsFile", new object[] {"PdfMemoryStream.pdf", Convert.ToBase64String(streamDoc.ToArray()), true }); + } + } +} + +{% endhighlight %} + +{% highlight c# tabtitle="OrderData.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + + public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) + { + this.OrderID = orderID; + this.CustomerID = customerID; + this.Freight = freight; + this.ShipCity = shipCity; + this.ShipName = shipName; + } + + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); + Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); + Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); + Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); + Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); + Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); + Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); + Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); + Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); + Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); + Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); + Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); + Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return Orders; + } + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +### Converting Memory Stream to File Stream for Pdf Export + +The Pdf Export feature in Syncfusion Blazor DataGrid allows you to export the Grid data to an Pdf workbook. In some cases, you may want to save the exported Pdf file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. + +To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the Pdf file as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. + +The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported Pdf file: + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Grids +@using System.IO; +@using Syncfusion.XlsIO +@using Syncfusion.PdfExport; +@inject IJSRuntime JSRuntime + + + + + + + + + + + + +@code { + private SfGrid Grid; + public List Orders { get; set; } + + protected override void OnInitialized() + { + Orders = OrderData.GetAllRecords(); + } + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. + { + //Memory stream to file stream exporting. + MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); + + //Create a copy of streamDoc1. + MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); + //For creating the exporting location with file name, for this need to specify the physical exact path of the file. + string filePaths = "C:Users/abc/Downloads/SampleTestPdf.pdf"; + + // Create a FileStream to write the moryStream contents to a file. + using (FileStream fileStream = File.Create(filePaths)) + { + // Copy the MemoryStream data to the FileStream. + copyOfStreamDoc1.CopyTo(fileStream); + } + } + } +} + +{% endhighlight %} + +{% highlight c# tabtitle="OrderData.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + + public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) + { + this.OrderID = orderID; + this.CustomerID = customerID; + this.Freight = freight; + this.ShipCity = shipCity; + this.ShipName = shipName; + } + + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); + Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); + Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); + Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); + Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); + Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); + Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); + Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); + Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); + Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); + Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); + Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); + Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); + } + + return Orders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +### Merging Two Pdf Memory Streams + +When merging two Pdf memory streams and exporting the resulting file as an Pdf workbook, you can leverage the capabilities of the [Syncfusion.Blazor.XlslO](https://www.nuget.org/packages/Syncfusion.XlsIO.Net.Core/) package to copy a worksheet between workbooks or within the same workbook. + +The example below demonstrates how to merge two memory streams and export that merged memory stream for browser download. + +In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal grid memory stream, while streamDoc2 contains the memory stream of a customized grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines the contents of streamDoc1 with streamDoc2, resulting in a combined workbook saved as a memory stream. This merged memory stream is then utilized to initiate the browser download. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Grids +@using System.IO; +@using Syncfusion.PdfExport; +@using Syncfusion.Pdf +@inject IJSRuntime JSRuntime + + + + + + + + + + + + +@code { + private SfGrid Grid; + public List Orders { get; set; } + + protected override void OnInitialized() + { + Orders = OrderData.GetAllRecords(); + } + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. + { + //Merging two memory stream. + MemoryStream mergedStream = new MemoryStream(); + + //Creates a PDF document. + Syncfusion.Pdf.PdfDocument finalDoc = new Syncfusion.Pdf.PdfDocument(); + MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); + //Create a copy of streamDoc1 to access the memory stream. + MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); + + //Customized grid for memory stream export. + PdfExportProperties ExportProperties = new PdfExportProperties(); + PdfTheme Theme = new PdfTheme(); + PdfBorder HeaderBorder = new PdfBorder(); + HeaderBorder.Color = "#000000"; + + PdfThemeStyle HeaderThemeStyle = new PdfThemeStyle() + { + FontColor = "#6A5ACD", + FontName = "Comic Sans MS", + FontSize = 17, + Bold = true, + Border = HeaderBorder + }; + Theme.Header = HeaderThemeStyle; + + PdfThemeStyle RecordThemeStyle = new PdfThemeStyle() + { + FontColor = "#800080", + FontName = "Comic Sans MS", + FontSize = 14, + Border = HeaderBorder + }; + Theme.Record = RecordThemeStyle; + + ExportProperties.Theme = Theme; + MemoryStream streamDoc2 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true, ExportProperties); + //Create a copy of streamDoc2 to access the memory stream. + MemoryStream copyOfStreamDoc2 = new MemoryStream(streamDoc2.ToArray()); + + //Creates a PDF stream for merging. + Stream[] streams = { copyOfStreamDoc1, copyOfStreamDoc2 }; + Syncfusion.Pdf.PdfDocument.Merge(finalDoc, streams); + finalDoc.Save(mergedStream); + await JSRuntime.InvokeVoidAsync("saveAsFile", new object[] { "MemoryStreamMerge.pdf", Convert.ToBase64String(mergedStream.ToArray()), true }); + } + } +} + +{% endhighlight %} + +{% highlight js tabtitle="wwwroot/scripts/saveAsFile.js" %} + +function saveAsFile(filename, bytesBase64) { + var link = document.createElement('a'); + link.download = filename; + link.href = "data:application/octet-stream;base64," + bytesBase64; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +} + +{% endhighlight %} + +{% highlight c# tabtitle="OrderData.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + + public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) + { + this.OrderID = orderID; + this.CustomerID = customerID; + this.Freight = freight; + this.ShipCity = shipCity; + this.ShipName = shipName; + } + + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); + Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); + Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); + Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); + Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); + Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); + Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); + Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); + Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); + Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); + Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); + Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); + Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return Orders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} \ No newline at end of file From f688261a7a1f3dc6984a2d5b9e8b5a44abc643e6 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Thu, 17 Apr 2025 18:11:28 +0530 Subject: [PATCH 06/26] Modified the md file --- blazor-toc.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blazor-toc.html b/blazor-toc.html index 5e1d6f503c..1aec7d2582 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -1947,8 +1947,9 @@
  • - Export to PDF + PDF Export
  • From e1912c611ae1ac62295f322c3295684de219460a Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Wed, 23 Apr 2025 10:32:11 +0530 Subject: [PATCH 07/26] Modified the md file --- blazor/datagrid/pdf-export-options.md | 32 +++++++++++++-------------- blazor/datagrid/pdf-export.md | 26 +++++++++++----------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index e3a1eb7b17..6177e77a24 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -9,13 +9,13 @@ documentation: ug # Pdf Export Options in Blazor DataGrid -The Syncfusion Blazor DataGrid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. +The Grid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. The PDF export action can be customized based on your requirements using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. By using the `PdfExportProperties` property, you can export the current page records, selected records, or filtered records. Additionally, you can customize the page alignments using the `PdfExportProperties` property. ## Export current page records -Exporting the current page in Syncfusion Blazor DataGrid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. +Exporting the current page in Grid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property as **CurrentPage**. @@ -129,7 +129,7 @@ The following example demonstrates how to export current page to a PDF document ## Export selected records -Exporting only the selected records from the Syncfusion Blazor DataGrid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. +Exporting only the selected records from the Grid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [ToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. @@ -236,7 +236,7 @@ public class OrderData ## Export filtered records -Exporting only the filtered records from the Syncfusion Blazor DataGrid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. +Exporting only the filtered records from the Grid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. This can be achieved by defining the filtered data in the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property before initiating the export. @@ -343,7 +343,7 @@ public class OrderData ## Export with hidden columns -Exporting hidden columns in the Syncfusion Blazor DataGrid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. +Exporting hidden columns in the Grid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. To export hidden columns of the Grid to a PDF file, you need to set the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_IncludeHiddenColumn) property as **true** in the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -453,7 +453,7 @@ public class OrderData ## Show or hide columns while exporting -The Syncfusion Blazor DataGrid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. +The Grid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. To show or hide columns based on user interaction during the export process, you can follow these steps: @@ -567,7 +567,7 @@ public class OrderData ## Change page orientation -The Syncfusion Blazor DataGrid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. +The Grid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. To change the page orientation to landscape for the exported document, you can set the [PageOrientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageOrientation) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -672,7 +672,7 @@ public class OrderData ## Change page size -The Syncfusion Blazor DataGrid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. +The Grid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. To customize the page size for the exported document, you can set the [PageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageSize) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property to the desired page size. @@ -839,7 +839,7 @@ public class OrderData ## Define file name -The Syncfusion Blazor DataGrid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. +The Grid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property to the desired file name. @@ -928,7 +928,7 @@ public class OrderDetails ## Enabling horizontal overflow -The Syncfusion Blazor DataGrid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. +The Grid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. You can achieve this by utilizing the [PdfExportProperties.AllowHorizontalOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_AllowHorizontalOverflow) property of the Grid. @@ -1040,7 +1040,7 @@ In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusi ## Customizing columns on export -The Syncfusion Blazor DataGrid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. +The Grid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. To customize the Grid columns, you can follow these steps: @@ -1297,7 +1297,7 @@ In addition to changing the default font, the Syncfusion Blazor Grid allows you When using a custom font, it's important to provide the font in a format that can be easily embedded in the exported document. This is typically done by encoding the font file into a base64 string. This base64 encoded font data can then be used within the export settings to ensure the custom font is applied to the exported PDF. -The following example demonstrates how to use the custom **Algeria** font for exporting the grid. The **base64AlgeriaFont** variable contains the base64 encoded string representing the **Algeria** font file. This encoded font data is used in the PDF export properties to specify the custom font. +The following example demonstrates how to use the custom **Algeria** font for exporting the Grid. The **base64AlgeriaFont** variable contains the base64 encoded string representing the **Algeria** font file. This encoded font data is used in the PDF export properties to specify the custom font. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1422,7 +1422,7 @@ public class OrderData ## Exporting Grid Data as Stream -The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. +The Grid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. ### Exporting Grid Data as Memory Stream @@ -1577,7 +1577,7 @@ public class OrderData ### Converting Memory Stream to File Stream for Pdf Export -The Pdf Export feature in Syncfusion Blazor DataGrid allows you to export the Grid data to an Pdf workbook. In some cases, you may want to save the exported Pdf file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. +The Pdf Export feature in Grid allows you to export the Grid data to an Pdf workbook. In some cases, you may want to save the exported Pdf file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the Pdf file as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. @@ -1691,7 +1691,7 @@ When merging two Pdf memory streams and exporting the resulting file as an Pdf w The example below demonstrates how to merge two memory streams and export that merged memory stream for browser download. -In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal grid memory stream, while streamDoc2 contains the memory stream of a customized grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines the contents of streamDoc1 with streamDoc2, resulting in a combined workbook saved as a memory stream. This merged memory stream is then utilized to initiate the browser download. +In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal Grid memory stream, while streamDoc2 contains the memory stream of a customized Grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines the contents of streamDoc1 with streamDoc2, resulting in a combined workbook saved as a memory stream. This merged memory stream is then utilized to initiate the browser download. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1734,7 +1734,7 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st //Create a copy of streamDoc1 to access the memory stream. MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); - //Customized grid for memory stream export. + //Customized Grid for memory stream export. PdfExportProperties ExportProperties = new PdfExportProperties(); PdfTheme Theme = new PdfTheme(); PdfBorder HeaderBorder = new PdfBorder(); diff --git a/blazor/datagrid/pdf-export.md b/blazor/datagrid/pdf-export.md index 63267a04a6..bf43a92ac9 100644 --- a/blazor/datagrid/pdf-export.md +++ b/blazor/datagrid/pdf-export.md @@ -9,11 +9,11 @@ documentation: ug # Pdf export in Blazor Grid -The PDF export feature in the Syncfusion Blazor DataGrid allows you to export grid data to a PDF document, providing the ability to generate printable reports or share data in a standardized format. +The PDF export feature in the Grid allows you to export Grid data to a PDF document, providing the ability to generate printable reports or share data in a standardized format. -To enable PDF export in the grid, you need to set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) property to **true** and use the **PdfExport** method for exporting. +To enable PDF export in the Grid, you need to set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) property to **true** and use the **PdfExport** method for exporting. -The following example demonstrates how to perform a PDF export action in the grid. +The following example demonstrates how to perform a PDF export action in the Grid. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -94,15 +94,15 @@ public class OrderDetails ## Show spinner while exporting -Showing a spinner while exporting in the Syncfusion Blazor DataGrid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. +Showing a spinner while exporting in the Grid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. -To show or hide a spinner while exporting the grid, you can utilize the [ShowSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ShowSpinnerAsync) and [HideSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_HideSpinnerAsync) methods provided by the Grid within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. +To show or hide a spinner while exporting the Grid, you can utilize the [ShowSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ShowSpinnerAsync) and [HideSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_HideSpinnerAsync) methods provided by the Grid within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. The `OnToolbarClick` event is triggered when a toolbar item in the Grid is clicked. Within the event handler, the code checks if the clicked **item** is related with PDF export, specifically the **Grid_pdfexport** item. If a match is found, the `ShowSpinnerAsync` method is used on the Grid instance to display the spinner. To hide the spinner after the exporting is completed, bind the [ExportComplete](https://blazor.syncfusion.com/documentation/datagrid/events#exportcomplete) event and use the `HideSpinnerAsync` method on the Grid instance to hide the spinner. -The following example demonstrates how to show and hide the spinner during PDF export in a grid. +The following example demonstrates how to show and hide the spinner during PDF export in a Grid. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -189,11 +189,11 @@ public class OrderDetails ## Binding custom data source while exporting -The Syncfusion Blazor DataGrid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the grid, which can be generated or retrieved based on your application logic. +The Grid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the Grid, which can be generated or retrieved based on your application logic. To export data, you need to define the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) object. This property represents the data source that will be used for the PDF export. -The following example demonstrates how to render custom data source during PDF export. By utilizing the **PdfExport** method and passing the `PdfExportProperties` object through the grid instance, the grid data will be exported to a PDF using the dynamically defined data source. +The following example demonstrates how to render custom data source during PDF export. By utilizing the **PdfExport** method and passing the `PdfExportProperties` object through the Grid instance, the Grid data will be exported to a PDF using the dynamically defined data source. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -331,13 +331,13 @@ public class ChangeData ## Exporting with custom aggregate -Custom aggregates in the Syncfusion Blazor DataGrid involves exporting grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. +Custom aggregates in the Grid involves exporting Grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. In order to utilize custom aggregation, you need to specify the [Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridAggregateColumn.html?_gl=1*n3kv9z*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDE5NjE5My4xMjAuMS4xNzQ0MTk3ODY5LjAuMC4w#Syncfusion_Blazor_Grids_GridAggregateColumn_Type) property as **Custom**. Within the **CustomAggregateFunction** function, it takes an input data that contains a result property. The function calculates the count of objects in this data where the **ShipCountry** field value is equal to **Brazil** and returns the count with a descriptive label. -The following example shows how to export the grid with a custom aggregate that shows the calculation of the **Brazil** count of the **ShipCountry** column. +The following example shows how to export the Grid with a custom aggregate that shows the calculation of the **Brazil** count of the **ShipCountry** column. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -450,11 +450,11 @@ public class OrderDetails ## Exporting with custom date format -The exporting functionality in the Syncfusion Blazor DataGrid allows you to export grid data, including custom date format. This feature is useful when you need to export grid data with customized date values. +The exporting functionality in the Grid allows you to export Grid data, including custom date format. This feature is useful when you need to export Grid data with customized date values. -To apply a custom date format to grid columns during the export, you can utilize the [Columns.Format](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html?_gl=1*menbkd*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDI2NjE5MC4xMjIuMS4xNzQ0MjY3NTQ1LjAuMC4w#Syncfusion_Blazor_Grids_GridColumn_Format) property. This property allows you to define a custom format using format options. +To apply a custom date format to Grid columns during the export, you can utilize the [Columns.Format](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html?_gl=1*menbkd*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDI2NjE5MC4xMjIuMS4xNzQ0MjY3NTQ1LjAuMC4w#Syncfusion_Blazor_Grids_GridColumn_Format) property. This property allows you to define a custom format using format options. -The following example demonstrates how to export the grid data with custom date format. In this example, the formatOptions object is used as the `Columns.Format` property for the **OrderDate** column. This custom date format displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Thu, Jul 4, '96). +The following example demonstrates how to export the Grid data with custom date format. In this example, the formatOptions object is used as the `Columns.Format` property for the **OrderDate** column. This custom date format displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Thu, Jul 4, '96). {% tabs %} {% highlight razor tabtitle="Index.razor" %} From 595b6b6a8521ebfd88154c6f813a14693d92f26f Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Wed, 23 Apr 2025 20:05:38 +0530 Subject: [PATCH 08/26] Modified the md file --- blazor/datagrid/pdf-export-options.md | 166 +++++++++++++++----------- blazor/datagrid/pdf-export.md | 163 +++++++++++++++++++++---- 2 files changed, 237 insertions(+), 92 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 6177e77a24..3cb846d36b 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1,21 +1,21 @@ --- layout: post -title: Pdf Export Options in Blazor DataGrid | Syncfusion -description: Checkout and learn here all about Pdf Export Options in Syncfusion Blazor DataGrid and much more. +title: PDF Export Options in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about PDF Export Options in Syncfusion Blazor DataGrid and much more. platform: Blazor control: DataGrid documentation: ug --- -# Pdf Export Options in Blazor DataGrid +# PDF Export Options in Blazor DataGrid -The Grid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. +The Syncfusion Blazor Grid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. The PDF export action can be customized based on your requirements using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. By using the `PdfExportProperties` property, you can export the current page records, selected records, or filtered records. Additionally, you can customize the page alignments using the `PdfExportProperties` property. ## Export current page records -Exporting the current page in Grid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. +Exporting the current page in Syncfusion Blazor Grid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property as **CurrentPage**. @@ -60,9 +60,9 @@ The following example demonstrates how to export current page to a PDF document Orders = EmployeeData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var exportProperties = new PdfExportProperties { @@ -129,7 +129,7 @@ The following example demonstrates how to export current page to a PDF document ## Export selected records -Exporting only the selected records from the Grid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. +Exporting only the selected records from the Syncfusion Blazor Grid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [ToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. @@ -170,9 +170,9 @@ The following example demonstrates how to export the selected records to a PDF d Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var selectedRecords = await Grid.GetSelectedRecordsAsync(); PdfExportProperties exportProperties = new PdfExportProperties @@ -236,7 +236,7 @@ public class OrderData ## Export filtered records -Exporting only the filtered records from the Grid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. +Exporting only the filtered records from the Syncfusion Blazor Grid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. This can be achieved by defining the filtered data in the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property before initiating the export. @@ -277,9 +277,9 @@ The following example demonstrates how to export the filtered records to a PDF d Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var FilterdRecords = (IEnumerable)await Grid.GetFilteredRecordsAsync(); PdfExportProperties exportProperties = new PdfExportProperties @@ -343,7 +343,7 @@ public class OrderData ## Export with hidden columns -Exporting hidden columns in the Grid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. +Exporting hidden columns in the Syncfusion Blazor Grid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. To export hidden columns of the Grid to a PDF file, you need to set the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_IncludeHiddenColumn) property as **true** in the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -382,9 +382,9 @@ The following example demonstrates how to export hidden columns to a PDF file. I Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { PdfExportProperties exportProperties = new PdfExportProperties { @@ -453,7 +453,7 @@ public class OrderData ## Show or hide columns while exporting -The Grid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. +The Syncfusion Blazor Grid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. To show or hide columns based on user interaction during the export process, you can follow these steps: @@ -494,9 +494,9 @@ In the following example, the **CustomerID** is initially a hidden column in the Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { CustomerIDVisible = true; ShipCityVisible=false; @@ -567,7 +567,7 @@ public class OrderData ## Change page orientation -The Grid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. +The Syncfusion Blazor Grid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. To change the page orientation to landscape for the exported document, you can set the [PageOrientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageOrientation) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -583,34 +583,62 @@ The following example demonstrates how to export the Grid into PDF document by s {% highlight razor tabtitle="Index.razor" %} @using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.DropDowns +@using Syncfusion.Blazor.Navigations +@using System.Collections.Generic - - +
    + + + + +
    + + + - - - - - + + + + @code { private SfGrid Grid; - public List Orders { get; set; } + public List Data { get; set; } + + public class OrientationItem + { + public string Text { get; set; } + public string Value { get; set; } + } + + public string SelectedOrientation { get; set; } = "Portrait"; + + public List Orientations = new List + { + new OrientationItem { Text = "Portrait", Value = "Portrait" }, + new OrientationItem { Text = "Landscape", Value = "Landscape" } + }; protected override void OnInitialized() { - Orders = OrderData.GetAllRecords(); + Data = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id.Contains("pdfexport", StringComparison.OrdinalIgnoreCase)) { - PdfExportProperties ExportProperties = new PdfExportProperties(); - ExportProperties.PageOrientation = Syncfusion.Blazor.Grids.PageOrientation.Landscape; - await this.Grid.PdfExport(ExportProperties); + var exportProps = new PdfExportProperties + { + PageOrientation = SelectedOrientation == "Landscape" + ? Syncfusion.Blazor.Grids.PageOrientation.Landscape + : Syncfusion.Blazor.Grids.PageOrientation.Portrait + }; + + await Grid.ExportToPdfAsync(exportProps); } } } @@ -668,11 +696,11 @@ public class OrderData {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/LXryZzCpgLAZwSaU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +{% previewsample "https://blazorplayground.syncfusion.com/embed/BZLeNzVKUaStvZne?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ## Change page size -The Grid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. +The Syncfusion Blazor Grid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. To customize the page size for the exported document, you can set the [PageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageSize) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property to the desired page size. @@ -767,9 +795,9 @@ The following example demonstrates how to export the Grid into PDF document by s Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var exportProps = new PdfExportProperties { @@ -839,7 +867,7 @@ public class OrderData ## Define file name -The Grid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. +The Syncfusion Blazor Grid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property to the desired file name. @@ -864,9 +892,9 @@ The following example demonstrates how to define a file name using `PdfExportPro private SfGrid DefaultGrid; public List Orders { get; set; } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { PdfExportProperties ExportProperties = new PdfExportProperties(); ExportProperties.FileName = "New.pdf"; @@ -928,7 +956,7 @@ public class OrderDetails ## Enabling horizontal overflow -The Grid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. +The Syncfusion Blazor Grid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. You can achieve this by utilizing the [PdfExportProperties.AllowHorizontalOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_AllowHorizontalOverflow) property of the Grid. @@ -970,9 +998,9 @@ In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusi { Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var pdfExportProps = new PdfExportProperties { @@ -1040,7 +1068,7 @@ In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusi ## Customizing columns on export -The Grid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. +The Syncfusion Blazor Grid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. To customize the Grid columns, you can follow these steps: @@ -1060,7 +1088,7 @@ The following example demonstrates how to customize the Grid columns when export - + @@ -1076,9 +1104,9 @@ The following example demonstrates how to customize the Grid columns when export Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { List ExportColumns = new List(); ExportColumns.Add(new GridColumn() { Field = "OrderID", HeaderText = "Order Number", Width = "120" }); @@ -1155,7 +1183,7 @@ The Syncfusion Blazor Grid provides the ability to customize the font in the exp ### Default fonts -By default, the Grid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: +By default, the Syncfusion Blazor Grid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: * Helvetica * TimesRoman @@ -1183,9 +1211,9 @@ The following example demonstrates, how to change the default font when exportin - + - + @@ -1202,9 +1230,9 @@ The following example demonstrates, how to change the default font when exportin Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var exportProps = new PdfExportProperties { @@ -1309,9 +1337,9 @@ The following example demonstrates how to use the custom **Algeria** font for ex - + - + @@ -1330,9 +1358,9 @@ The following example demonstrates how to use the custom **Algeria** font for ex Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var exportProps = new PdfExportProperties { @@ -1422,13 +1450,13 @@ public class OrderData ## Exporting Grid Data as Stream -The Grid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. +The Syncfusion Blazor Grid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. ### Exporting Grid Data as Memory Stream -The Export to Memory Stream feature allows you to export data from a Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. +The Export to Memory Stream feature allows you to export data from a Syncfusion Blazor Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. -To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an Pdf workbook as a memory stream, which can then be sent to the browser for download. +To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an PDF workbook as a memory stream, which can then be sent to the browser for download. The provided example showcases the process of exporting the file as a memory stream and sending the byte to initiate a browser download. @@ -1516,7 +1544,7 @@ In the **Index.razor** file, the Grid is set up, the export operation is trigger Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { @@ -1575,13 +1603,13 @@ public class OrderData {% endhighlight %} {% endtabs %} -### Converting Memory Stream to File Stream for Pdf Export +### Converting Memory Stream to File Stream for PDF Export -The Pdf Export feature in Grid allows you to export the Grid data to an Pdf workbook. In some cases, you may want to save the exported Pdf file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. +The PDF Export feature in Syncfusion Blazor Grid allows you to export the Grid data to an PDF workbook. In some cases, you may want to save the exported PDF file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. -To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the Pdf file as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. +To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the PDF file as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. -The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported Pdf file: +The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported PDF file: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1612,7 +1640,7 @@ The example below demonstrates how to achieve this by converting the memory stre Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { @@ -1685,9 +1713,9 @@ public class OrderData {% endhighlight %} {% endtabs %} -### Merging Two Pdf Memory Streams +### Merging Two PDF Memory Streams -When merging two Pdf memory streams and exporting the resulting file as an Pdf workbook, you can leverage the capabilities of the [Syncfusion.Blazor.XlslO](https://www.nuget.org/packages/Syncfusion.XlsIO.Net.Core/) package to copy a worksheet between workbooks or within the same workbook. +When merging two PDF memory streams and exporting the resulting file as an PDF workbook, you can leverage the capabilities of the [Syncfusion.Blazor.XlslO](https://www.nuget.org/packages/Syncfusion.XlsIO.Net.Core/) package to copy a worksheet between workbooks or within the same workbook. The example below demonstrates how to merge two memory streams and export that merged memory stream for browser download. @@ -1721,7 +1749,7 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st { Orders = OrderData.GetAllRecords(); } - public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + public async Task ToolbarClickHandler(ClickEventArgs args) { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { diff --git a/blazor/datagrid/pdf-export.md b/blazor/datagrid/pdf-export.md index bf43a92ac9..836c947b80 100644 --- a/blazor/datagrid/pdf-export.md +++ b/blazor/datagrid/pdf-export.md @@ -1,17 +1,17 @@ --- layout: post -title: Pdf Export in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Pdf Export in Syncfusion Blazor DataGrid component and much more details. +title: Pdf Export in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Pdf Export in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Pdf export in Blazor Grid +# PDF export in Blazor DataGrid -The PDF export feature in the Grid allows you to export Grid data to a PDF document, providing the ability to generate printable reports or share data in a standardized format. +The PDF export feature in the Syncfusion Blazor DataGrid allows you to export Grid data to a PDF document, providing the ability to generate printable reports or share data in a standardized format. -To enable PDF export in the Grid, you need to set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) property to **true** and use the **PdfExport** method for exporting. +To enable PDF export in the Grid, you need to set the [AllowPdfExport](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowPdfExport) property to **true** and use the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method for exporting. The following example demonstrates how to perform a PDF export action in the Grid. @@ -37,7 +37,7 @@ The following example demonstrates how to perform a PDF export action in the Gri { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - await this.DefaultGrid.PdfExport(); + await this.DefaultGrid.ExportToPdfAsync(); } } protected override void OnInitialized() @@ -94,7 +94,7 @@ public class OrderDetails ## Show spinner while exporting -Showing a spinner while exporting in the Grid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. +Showing a spinner while exporting in the Syncfusion Blazor Grid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. To show or hide a spinner while exporting the Grid, you can utilize the [ShowSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ShowSpinnerAsync) and [HideSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_HideSpinnerAsync) methods provided by the Grid within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. @@ -127,7 +127,7 @@ The following example demonstrates how to show and hide the spinner during PDF e if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { await this.DefaultGrid.ShowSpinnerAsync(); - await this.DefaultGrid.PdfExport(); + await this.DefaultGrid.ExportToPdfAsync(); } } public async void ExportCompleteHandler(object args) @@ -189,11 +189,11 @@ public class OrderDetails ## Binding custom data source while exporting -The Grid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the Grid, which can be generated or retrieved based on your application logic. +The Syncfusion Blazor Grid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the Grid, which can be generated or retrieved based on your application logic. To export data, you need to define the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) object. This property represents the data source that will be used for the PDF export. -The following example demonstrates how to render custom data source during PDF export. By utilizing the **PdfExport** method and passing the `PdfExportProperties` object through the Grid instance, the Grid data will be exported to a PDF using the dynamically defined data source. +The following example demonstrates how to render custom data source during PDF export. By utilizing the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method and passing the `PdfExportProperties` object through the Grid instance, the Grid data will be exported to a PDF using the dynamically defined data source. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -221,14 +221,14 @@ The following example demonstrates how to render custom data source during PDF e public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") // Id = Grid ID + _ + Toolbar Item Name. + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { var convertedOrders = ConvertToOrderDetails(newOrders); PdfExportProperties PdfProperties = new PdfExportProperties { DataSource = convertedOrders }; - await this.DefaultGrid.PdfExport(PdfProperties); + await this.DefaultGrid.ExportToPdfAsync(PdfProperties); } } protected override void OnInitialized() @@ -331,12 +331,14 @@ public class ChangeData ## Exporting with custom aggregate -Custom aggregates in the Grid involves exporting Grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. +Custom aggregates in the Syncfusion Blazor Grid involves exporting Grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. In order to utilize custom aggregation, you need to specify the [Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridAggregateColumn.html?_gl=1*n3kv9z*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDE5NjE5My4xMjAuMS4xNzQ0MTk3ODY5LjAuMC4w#Syncfusion_Blazor_Grids_GridAggregateColumn_Type) property as **Custom**. Within the **CustomAggregateFunction** function, it takes an input data that contains a result property. The function calculates the count of objects in this data where the **ShipCountry** field value is equal to **Brazil** and returns the count with a descriptive label. +The [PdfAggregateTemplateInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfAggregateTemplateInfo) event is used to handle custom aggregates during the export process. Within this event, the custom aggregate value is applied to the `args.Cell.Value` property, allowing you to include the custom aggregation in the exported PDF file. + The following example shows how to export the Grid with a custom aggregate that shows the calculation of the **Brazil** count of the **ShipCountry** column. {% tabs %} @@ -382,9 +384,9 @@ The following example shows how to export the Grid with a custom aggregate that public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) { - if (args.Item.Id == "Grid_pdfexport") // "Grid" + "_" + "Toolbar Item". + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - await DefaultGrid.PdfExport(); + await DefaultGrid.ExportToPdfAsync(); } } @@ -450,11 +452,11 @@ public class OrderDetails ## Exporting with custom date format -The exporting functionality in the Grid allows you to export Grid data, including custom date format. This feature is useful when you need to export Grid data with customized date values. +The exporting functionality in the Syncfusion Blazor Grid allows you to export Grid data, including custom date format. This feature is useful when you need to export Grid data with customized date values. -To apply a custom date format to Grid columns during the export, you can utilize the [Columns.Format](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html?_gl=1*menbkd*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDI2NjE5MC4xMjIuMS4xNzQ0MjY3NTQ1LjAuMC4w#Syncfusion_Blazor_Grids_GridColumn_Format) property. This property allows you to define a custom format using format options. +To apply a custom date format to Grid columns during the export, you can utilize the [Format](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html?_gl=1*menbkd*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDI2NjE5MC4xMjIuMS4xNzQ0MjY3NTQ1LjAuMC4w#Syncfusion_Blazor_Grids_GridColumn_Format) property. This property allows you to define a custom format using format options. -The following example demonstrates how to export the Grid data with custom date format. In this example, the formatOptions object is used as the `Columns.Format` property for the **OrderDate** column. This custom date format displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Thu, Jul 4, '96). +The following example demonstrates how to export the Grid with a custom date format. In this example, the `Format` property is used for the **OrderDate** column. This custom date `Format` displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Sun, Jan 15, 23). {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -464,9 +466,9 @@ The following example demonstrates how to export the Grid data with custom date - - - + + + @@ -481,7 +483,7 @@ The following example demonstrates how to export the Grid data with custom date { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - await this.DefaultGrid.PdfExport(); + await this.DefaultGrid.ExportToPdfAsync(); } } @@ -547,4 +549,119 @@ public class OrderData {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/LjVSNfWZIXZQsIfM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} \ No newline at end of file +{% previewsample "https://blazorplayground.syncfusion.com/embed/LjVSNfWZIXZQsIfM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Passing additional parameters to the server when exporting + +Passing additional parameters to the server when exporting data in the Syncfusion Blazor DataGrid involves providing flexibility to include extra information or customize the export process based on specific requirements. + +You can achieve this by utilizing the [Query](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.Query.html) property and the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event. Within the `Query` property, you can invoke the [AddParams](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.Query.html#Syncfusion_Blazor_Data_Query_AddParams_System_String_System_Object_) method to add parameters to the request. + +The following example demonstrates how to pass additional parameters to the server when PDF exporting within the `OnToolbarClick` event. Within the event, the additional parameters, specifically **recordcount** as **15**, are passed using the `AddParams` method and displayed as a message. Additionally, the [ExportComplete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_ExportComplete) event is used to reset the query state after the export is completed. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Grids + +

    @message

    + + + + + + + + + + +@code { + private SfGrid Grid; + public List Orders { get; set; } + private string message = ""; + private Query queryClone; + + protected override void OnInitialized() + { + Orders = OrderData.GetAllRecords(); + } + + public async Task ToolbarClickHandler(ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. + { + queryClone = this.Grid?.Query; + this.Grid!.Query = new Query().AddParams("recordcount", "15"); + + if (this.Grid!.Query.Queries.Params?.Count > 0) + { + var param = Grid.Query.Queries.Params.First(); + message = $"Key: {param.Key} and Value: {param.Value?.ToString()} on {args.Item.Text}"; + } + await Grid.ExportToPdfAsync(); + } + } + + public void ExportCompleteHandler(object args) + { + if (queryClone != null) + { + this.Grid!.Query = queryClone; + } + } +} + +{% endhighlight %} + +{% highlight c# tabtitle="OrderData.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) + { + this.OrderID = orderID; + this.CustomerID = customerID; + this.Freight = freight; + this.ShipCity = shipCity; + this.ShipName = shipName; + } + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); + Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); + Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); + Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); + Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); + Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); + Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); + Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); + Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); + Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); + Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); + Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); + Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); + Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); + } + return Orders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/hZBIZTssVIvJCeji?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} \ No newline at end of file From 51165aad74bd04153b3575cdbe8ebd0674b693bc Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Wed, 23 Apr 2025 20:15:40 +0530 Subject: [PATCH 09/26] Modified the md file --- blazor/datagrid/pdf-export-options.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 3cb846d36b..47fbe4c2ea 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -141,7 +141,7 @@ To export the selected records from the Grid to a PDF file, you can follow these 3. Assign the selected data to the `ExportProperties.DataSource` property. -4. Trigger the export operation using the `PdfExport` method. +4. Trigger the export operation using the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The following example demonstrates how to export the selected records to a PDF document. @@ -248,7 +248,7 @@ To export only the filtered data from the Grid to a PDF file, you can follow the 3. Assign the filtered data to the `ExportProperties.DataSource` property. -4. Trigger the export operation using the `PdfExport` method. +4. Trigger the export operation using the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The following example demonstrates how to export the filtered records to a PDF document. From 04db439265bf4c247a800f4bb07163b55d477be2 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Thu, 24 Apr 2025 11:03:39 +0530 Subject: [PATCH 10/26] Documentation - Pdf Export in Blazor platform --- blazor/datagrid/pdf-export-options.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 47fbe4c2ea..b7561059aa 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -84,7 +84,7 @@ The following example demonstrates how to export current page to a PDF document } {% endhighlight %} -{% highlight c# tabtitle="OrderData.cs" %} +{% highlight c# tabtitle="EmployeeData.cs" %} public class EmployeeData { @@ -131,11 +131,11 @@ The following example demonstrates how to export current page to a PDF document Exporting only the selected records from the Syncfusion Blazor Grid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. -To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [ToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. +To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. To export the selected records from the Grid to a PDF file, you can follow these steps: -1. Handle the `ToolbarClick` event of the Grid. +1. Handle the `OnToolbarClick` event of the Grid. 2. Retrieve the selected records using the [GetSelectedRecordsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetSelectedRecordsAsync) method. @@ -457,7 +457,7 @@ The Syncfusion Blazor Grid provides the functionality to show or hide columns dy To show or hide columns based on user interaction during the export process, you can follow these steps: -1. Handle the [ToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event of the Grid. +1. Handle the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event of the Grid. 2. Update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property of the column to **true** or **false**. From 144a87450e4d8c85857069f834c00ca4fb31feed Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Thu, 24 Apr 2025 13:52:30 +0530 Subject: [PATCH 11/26] Modified the md file --- blazor/datagrid/pdf-export-options.md | 58 +++++++++++++-------------- blazor/datagrid/pdf-export.md | 12 +++--- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index b7561059aa..83c1931dd5 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -7,15 +7,15 @@ control: DataGrid documentation: ug --- -# PDF Export Options in Blazor DataGrid +# PDF export options in Blazor DataGrid -The Syncfusion Blazor Grid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. +The Syncfusion Blazor DataGrid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. The PDF export action can be customized based on your requirements using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. By using the `PdfExportProperties` property, you can export the current page records, selected records, or filtered records. Additionally, you can customize the page alignments using the `PdfExportProperties` property. ## Export current page records -Exporting the current page in Syncfusion Blazor Grid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. +Exporting the current page in Syncfusion Blazor DataGrid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property as **CurrentPage**. @@ -129,11 +129,11 @@ The following example demonstrates how to export current page to a PDF document ## Export selected records -Exporting only the selected records from the Syncfusion Blazor Grid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. +Exporting only the selected records from the Syncfusion Blazor DataGrid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. -To export the selected records from the Grid to a PDF file, you can follow these steps: +To export the selected records from the Grid to a PDF document, you can follow these steps: 1. Handle the `OnToolbarClick` event of the Grid. @@ -236,11 +236,11 @@ public class OrderData ## Export filtered records -Exporting only the filtered records from the Syncfusion Blazor Grid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. +Exporting only the filtered records from the Syncfusion Blazor DataGrid allows you to generate PDF document that include only the data that matches your applied filters. This feature is useful when you want to export a subset of data based on specific criteria. This can be achieved by defining the filtered data in the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property before initiating the export. -To export only the filtered data from the Grid to a PDF file, you can follow these steps: +To export only the filtered data from the Grid to a PDF document, you can follow these steps: 1. Apply the desired filter to the Grid data. @@ -343,11 +343,11 @@ public class OrderData ## Export with hidden columns -Exporting hidden columns in the Syncfusion Blazor Grid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. +Exporting hidden columns in the Syncfusion Blazor DataGrid allows you to include hidden columns in the exported PDF document. This feature is useful when you have columns that are hidden in the UI but still need to be included in the exported document. -To export hidden columns of the Grid to a PDF file, you need to set the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_IncludeHiddenColumn) property as **true** in the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. +To export hidden columns of the Grid to a PDF document, you need to set the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_IncludeHiddenColumn) property as **true** in the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. -The following example demonstrates how to export hidden columns to a PDF file. In this example, the **ShipCity** column, which is not visible in the UI, is exported to the PDF document. You can also export the Grid by changing the `PdfExportProperties.IncludeHiddenColumn` property based on the switch toggle using the `Checked` property of the [Toggle Switch Button]((https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp)). +The following example demonstrates how to export hidden columns to a PDF document. In this example, the **ShipCity** column, which is not visible in the UI, is exported to the PDF document. You can also export the Grid by changing the `PdfExportProperties.IncludeHiddenColumn` property based on the switch toggle using the `Checked` property of the [Toggle Switch Button]((https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp)). {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -453,7 +453,7 @@ public class OrderData ## Show or hide columns while exporting -The Syncfusion Blazor Grid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. +The Syncfusion Blazor DataGrid provides the functionality to show or hide columns dynamically during the export process. This feature allows you to selectively display or hide specific columns based on your requirements. To show or hide columns based on user interaction during the export process, you can follow these steps: @@ -567,7 +567,7 @@ public class OrderData ## Change page orientation -The Syncfusion Blazor Grid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. +The Syncfusion Blazor DataGrid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. To change the page orientation to landscape for the exported document, you can set the [PageOrientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageOrientation) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -700,7 +700,7 @@ public class OrderData ## Change page size -The Syncfusion Blazor Grid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. +The Syncfusion Blazor DataGrid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. To customize the page size for the exported document, you can set the [PageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageSize) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property to the desired page size. @@ -867,7 +867,7 @@ public class OrderData ## Define file name -The Syncfusion Blazor Grid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. +The Syncfusion Blazor DataGrid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property to the desired file name. @@ -956,7 +956,7 @@ public class OrderDetails ## Enabling horizontal overflow -The Syncfusion Blazor Grid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. +The Syncfusion Blazor DataGrid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. You can achieve this by utilizing the [PdfExportProperties.AllowHorizontalOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_AllowHorizontalOverflow) property of the Grid. @@ -1068,7 +1068,7 @@ In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusi ## Customizing columns on export -The Syncfusion Blazor Grid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. +The Syncfusion Blazor DataGrid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. To customize the Grid columns, you can follow these steps: @@ -1179,11 +1179,11 @@ public class OrderData ## Font and color customization -The Syncfusion Blazor Grid provides the ability to customize the font in the exported PDF document. This feature allows you to control the appearance and styling of the text in the exported file, ensuring consistency with your application's design. +The Syncfusion Blazor DataGrid provides the ability to customize the font in the exported PDF document. This feature allows you to control the appearance and styling of the text in the exported file, ensuring consistency with your application's design. ### Default fonts -By default, the Syncfusion Blazor Grid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: +By default, the Syncfusion Blazor DataGrid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: * Helvetica * TimesRoman @@ -1321,7 +1321,7 @@ public class OrderData ### Add custom font -In addition to changing the default font, the Syncfusion Blazor Grid allows you to use a custom font for the Grid header, content, and caption cells in the exported document. This can be achieved by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. +In addition to changing the default font, the Syncfusion Blazor DataGrid allows you to use a custom font for the Grid header, content, and caption cells in the exported document. This can be achieved by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. When using a custom font, it's important to provide the font in a format that can be easily embedded in the exported document. This is typically done by encoding the font file into a base64 string. This base64 encoded font data can then be used within the export settings to ensure the custom font is applied to the exported PDF. @@ -1448,19 +1448,19 @@ public class OrderData ![Add custom font](./images/Add-custom-font.png) -## Exporting Grid Data as Stream +## Exporting Grid data as stream -The Syncfusion Blazor Grid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. +The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. -### Exporting Grid Data as Memory Stream +### Exporting Grid data as memory stream -The Export to Memory Stream feature allows you to export data from a Syncfusion Blazor Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. +The export to memory stream feature allows you to export data from a Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an PDF workbook as a memory stream, which can then be sent to the browser for download. The provided example showcases the process of exporting the file as a memory stream and sending the byte to initiate a browser download. -**Step 1**: **Add JavaScript for File Download** +**Step 1**: **Add JavaScript for file download** Create a JavaScript file named **saveAsFile.js** under the **wwwroot/scripts** directory and include the following function to trigger browser download: @@ -1603,13 +1603,13 @@ public class OrderData {% endhighlight %} {% endtabs %} -### Converting Memory Stream to File Stream for PDF Export +### Converting memory stream to file stream for PDF export -The PDF Export feature in Syncfusion Blazor Grid allows you to export the Grid data to an PDF workbook. In some cases, you may want to save the exported PDF file as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. +The PDF Export feature in Syncfusion Blazor DataGrid allows you to export the Grid data to an PDF workbook. In some cases, you may want to save the exported PDF document as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. -To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the PDF file as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. +To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the PDF document as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. -The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported PDF file: +The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported PDF document: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1713,7 +1713,7 @@ public class OrderData {% endhighlight %} {% endtabs %} -### Merging Two PDF Memory Streams +### Merging two PDF memory streams When merging two PDF memory streams and exporting the resulting file as an PDF workbook, you can leverage the capabilities of the [Syncfusion.Blazor.XlslO](https://www.nuget.org/packages/Syncfusion.XlsIO.Net.Core/) package to copy a worksheet between workbooks or within the same workbook. diff --git a/blazor/datagrid/pdf-export.md b/blazor/datagrid/pdf-export.md index 836c947b80..7ac7982103 100644 --- a/blazor/datagrid/pdf-export.md +++ b/blazor/datagrid/pdf-export.md @@ -94,7 +94,7 @@ public class OrderDetails ## Show spinner while exporting -Showing a spinner while exporting in the Syncfusion Blazor Grid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. +Showing a spinner while exporting in the Syncfusion Blazor DataGrid enhances the experience by displaying a spinner during the export process. This feature provides a visual indication of the export progress, improving the understanding of the exporting process. To show or hide a spinner while exporting the Grid, you can utilize the [ShowSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ShowSpinnerAsync) and [HideSpinnerAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_HideSpinnerAsync) methods provided by the Grid within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. @@ -189,7 +189,7 @@ public class OrderDetails ## Binding custom data source while exporting -The Syncfusion Blazor Grid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the Grid, which can be generated or retrieved based on your application logic. +The Syncfusion Blazor DataGrid provides a convenient way to export data to a PDF format. With the PDF export feature, you can define a custom data source while exporting. This allows you to export data that is not necessarily bind to the Grid, which can be generated or retrieved based on your application logic. To export data, you need to define the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) object. This property represents the data source that will be used for the PDF export. @@ -331,13 +331,13 @@ public class ChangeData ## Exporting with custom aggregate -Custom aggregates in the Syncfusion Blazor Grid involves exporting Grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. +Custom aggregates in the Syncfusion Blazor DataGrid involves exporting Grid data that includes additional calculated values based on specific requirements. This feature enables you to show the comprehensive view of the data in the exported file by incorporating the specific aggregated information you need for analysis or reporting purposes. In order to utilize custom aggregation, you need to specify the [Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridAggregateColumn.html?_gl=1*n3kv9z*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDE5NjE5My4xMjAuMS4xNzQ0MTk3ODY5LjAuMC4w#Syncfusion_Blazor_Grids_GridAggregateColumn_Type) property as **Custom**. Within the **CustomAggregateFunction** function, it takes an input data that contains a result property. The function calculates the count of objects in this data where the **ShipCountry** field value is equal to **Brazil** and returns the count with a descriptive label. -The [PdfAggregateTemplateInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfAggregateTemplateInfo) event is used to handle custom aggregates during the export process. Within this event, the custom aggregate value is applied to the `args.Cell.Value` property, allowing you to include the custom aggregation in the exported PDF file. +The [PdfAggregateTemplateInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfAggregateTemplateInfo) event is used to handle custom aggregates during the export process. Within this event, the custom aggregate value is applied to the `args.Cell.Value` property, allowing you to include the custom aggregation in the exported PDF document. The following example shows how to export the Grid with a custom aggregate that shows the calculation of the **Brazil** count of the **ShipCountry** column. @@ -452,11 +452,11 @@ public class OrderDetails ## Exporting with custom date format -The exporting functionality in the Syncfusion Blazor Grid allows you to export Grid data, including custom date format. This feature is useful when you need to export Grid data with customized date values. +The exporting functionality in the Syncfusion Blazor DataGrid allows you to export Grid data, including custom date format. This feature is useful when you need to export Grid data with customized date values. To apply a custom date format to Grid columns during the export, you can utilize the [Format](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html?_gl=1*menbkd*_gcl_aw*R0NMLjE3MzgwNjYwODYuQ2p3S0NBaUFuZUs4QmhBVkVpd0FveTJIWVFDU1Nhbm1XaWRsRGpDb2lSTEZBZEhPR21xMERSM2VxSGZRRzVGUVA3WEZsNjV1NndrRG14b0NqMHNRQXZEX0J3RQ..*_ga*NzE4Mzg0MjU3LjE3NDEwOTIxNDg.*_ga_41J4HFMX1J*MTc0NDI2NjE5MC4xMjIuMS4xNzQ0MjY3NTQ1LjAuMC4w#Syncfusion_Blazor_Grids_GridColumn_Format) property. This property allows you to define a custom format using format options. -The following example demonstrates how to export the Grid with a custom date format. In this example, the `Format` property is used for the **OrderDate** column. This custom date `Format` displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Sun, Jan 15, 23). +The following example demonstrates how to export the Grid with a custom date format. In this example, the `Format` property is used for the **OrderDate** column. This custom date `Format` displays the date in the format of day-of-the-week, month abbreviation, day, and 2-digit year (e.g., Sun, Jan 15, 23). The [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method is called in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event to export the data to PDF document. {% tabs %} {% highlight razor tabtitle="Index.razor" %} From 3547f615a03a8ded4f27c44de5fbbc5e93129326 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Thu, 24 Apr 2025 15:50:44 +0530 Subject: [PATCH 12/26] Modified the md file --- blazor/datagrid/pdf-export-options.md | 2 +- blazor/datagrid/pdf-export.md | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 83c1931dd5..ea288d29b5 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -461,7 +461,7 @@ To show or hide columns based on user interaction during the export process, you 2. Update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property of the column to **true** or **false**. -3. Export the Grid to PDF. +3. Export the Grid to PDF document. 4. Handle the [ExportComplete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_ExportComplete) event to restore the column visibility to its original state. diff --git a/blazor/datagrid/pdf-export.md b/blazor/datagrid/pdf-export.md index 7ac7982103..d17b8035f4 100644 --- a/blazor/datagrid/pdf-export.md +++ b/blazor/datagrid/pdf-export.md @@ -126,13 +126,14 @@ The following example demonstrates how to show and hide the spinner during PDF e { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { + // Show spinner while exporting. await this.DefaultGrid.ShowSpinnerAsync(); await this.DefaultGrid.ExportToPdfAsync(); } } public async void ExportCompleteHandler(object args) { - + // Hide spinner after export completes. await this.DefaultGrid.HideSpinnerAsync(); } protected override void OnInitialized() @@ -193,7 +194,7 @@ The Syncfusion Blazor DataGrid provides a convenient way to export data to a PDF To export data, you need to define the [DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) object. This property represents the data source that will be used for the PDF export. -The following example demonstrates how to render custom data source during PDF export. By utilizing the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method and passing the `PdfExportProperties` object through the Grid instance, the Grid data will be exported to a PDF using the dynamically defined data source. +The following example demonstrates how to render custom data source during PDF export. By utilizing the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method and passing the `PdfExportProperties` object through the Grid instance, the Grid data will be exported to a PDF using the dynamically defined data source. {% tabs %} {% highlight razor tabtitle="Index.razor" %} From aa799122b641d56bd120b077caf774655422c883 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 25 Apr 2025 10:37:40 +0530 Subject: [PATCH 13/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 88 +++++++++++++-------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index ea288d29b5..bdf340e62a 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -11,15 +11,18 @@ documentation: ug The Syncfusion Blazor DataGrid allows you to customize the PDF export options functionality. This flexibility enables you to have greater control over the exported content and layout to meet your specific requirements. -The PDF export action can be customized based on your requirements using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. By using the `PdfExportProperties` property, you can export the current page records, selected records, or filtered records. Additionally, you can customize the page alignments using the `PdfExportProperties` property. +The PDF export action can be customized based on your requirements using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. By using the `PdfExportProperties` property, you can export the current page records, selected records, or filtered records, exclude or include hidden column, export with custom data source and change the file name. Additionally, you can customize the page alignments using the `PdfExportProperties` property. ## Export current page records -Exporting the current page in Syncfusion Blazor DataGrid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. +Exporting the current page in Syncfusion Blazor DataGrid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. -To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property as **CurrentPage**. +To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property. This property allows you to define which records you want to export. You can choose between two options: -The following example demonstrates how to export current page to a PDF document when a toolbar item is clicked. +1. **CurrentPage**: Exports only the records on the current Grid page. +2. **AllPages**: Exports all the records from the Grid. + +The following example demonstrates how to export current page to a PDF document when a toolbar item is clicked, using the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -66,11 +69,8 @@ The following example demonstrates how to export current page to a PDF document { var exportProperties = new PdfExportProperties { - ExportType = SelectedExportType == "AllPages" - ? Syncfusion.Blazor.Grids.ExportType.AllPages - : Syncfusion.Blazor.Grids.ExportType.CurrentPage + ExportType = SelectedExportType == "AllPages" ? ExportType.AllPages : ExportType CurrentPage }; - await Grid.ExportToPdfAsync(exportProperties); } } @@ -112,7 +112,6 @@ The following example demonstrates how to export current page to a PDF document Employees.Add(new EmployeeData(1008, "Laura", "Callahan", "Seattle")); Employees.Add(new EmployeeData(1009, "Anne", "Dodsworth", "London")); } - return Employees; } @@ -131,19 +130,15 @@ The following example demonstrates how to export current page to a PDF document Exporting only the selected records from the Syncfusion Blazor DataGrid allows generating PDF document that include only the desired data from the Grid. This feature provides the flexibility to export specific records that are relevant to the needs, enabling more focused and targeted PDF exports. -To export only the selected records by utilizing the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property in the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. - To export the selected records from the Grid to a PDF document, you can follow these steps: -1. Handle the `OnToolbarClick` event of the Grid. - -2. Retrieve the selected records using the [GetSelectedRecordsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetSelectedRecordsAsync) method. +1. Handle the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event of the Grid and retrieve the selected records using the [GetSelectedRecordsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetSelectedRecordsAsync) method. -3. Assign the selected data to the `ExportProperties.DataSource` property. +2. Assign the selected data to the [ExportProperties.DataSource](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DataSource) property. -4. Trigger the export operation using the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. +3. Trigger the export operation using the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. -The following example demonstrates how to export the selected records to a PDF document. +The following example demonstrates how to export the selected records to a PDF document when a toolbar item is clicked. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -347,7 +342,7 @@ Exporting hidden columns in the Syncfusion Blazor DataGrid allows you to include To export hidden columns of the Grid to a PDF document, you need to set the [IncludeHiddenColumn](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_IncludeHiddenColumn) property as **true** in the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. -The following example demonstrates how to export hidden columns to a PDF document. In this example, the **ShipCity** column, which is not visible in the UI, is exported to the PDF document. You can also export the Grid by changing the `PdfExportProperties.IncludeHiddenColumn` property based on the switch toggle using the `Checked` property of the [Toggle Switch Button]((https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp)). +The following example demonstrates how to export hidden columns to a PDF document using the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. In this example, the **ShipCity** column, which is not visible in the UI, is exported to the PDF document. You can also export the Grid by changing the `PdfExportProperties.IncludeHiddenColumn` property based on the switch toggle using the `bind-Checked` property of the [Blazor Toggle Switch Button](https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp). {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -457,13 +452,11 @@ The Syncfusion Blazor DataGrid provides the functionality to show or hide column To show or hide columns based on user interaction during the export process, you can follow these steps: -1. Handle the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event of the Grid. - -2. Update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property of the column to **true** or **false**. +1. Handle the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event of the Grid and update the visibility of the desired columns by setting the [Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property of the column to **true** or **false**. -3. Export the Grid to PDF document. +2. Export the Grid to PDF document. -4. Handle the [ExportComplete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_ExportComplete) event to restore the column visibility to its original state. +3. Handle the [ExportComplete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_ExportComplete) event to restore the column visibility to its original state. In the following example, the **CustomerID** is initially a hidden column in the Grid. However, during the export process, the **CustomerID** column is made visible, while the **ShipCity** column is hidden. @@ -633,11 +626,8 @@ The following example demonstrates how to export the Grid into PDF document by s { var exportProps = new PdfExportProperties { - PageOrientation = SelectedOrientation == "Landscape" - ? Syncfusion.Blazor.Grids.PageOrientation.Landscape - : Syncfusion.Blazor.Grids.PageOrientation.Portrait + PageOrientation = SelectedOrientation == "Landscape" ? PageOrientation.Landscape : PageOrientation.Portrait }; - await Grid.ExportToPdfAsync(exportProps); } } @@ -681,7 +671,6 @@ public class OrderData Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia", "Brazil")); Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery", "USA")); } - return Orders; } @@ -869,9 +858,9 @@ public class OrderData The Syncfusion Blazor DataGrid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. -To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property to the desired file name. +To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) or [ExportToCsvAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToCsvAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. -The following example demonstrates how to define a file name using `PdfExportProperties.FileName` property when exporting to PDF, based on the entered value as the file name. +The following example demonstrates how to define a file name using `PdfExportProperties.FileName` property when exporting to PDF document, based on the entered value as the file name. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -960,7 +949,7 @@ The Syncfusion Blazor DataGrid allows you to display all defined Grid columns on You can achieve this by utilizing the [PdfExportProperties.AllowHorizontalOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_AllowHorizontalOverflow) property of the Grid. -In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp) is added to enable and disable the `PdfExportProperties.AllowHorizontalOverflow` property. Based on the switch toggle, the `PdfExportProperties.AllowHorizontalOverflow` property is updated using the `Checked` property, and the export action is performed accordingly when the toolbar is clicked. +In the following example, the [Blazor Toggle Switch Button](https://blazor.syncfusion.com/documentation/toggle-switch-button/getting-started-webapp) is added to enable and disable the `PdfExportProperties.AllowHorizontalOverflow` property. Based on the switch toggle, the `PdfExportProperties.AllowHorizontalOverflow` property is updated using the `Checked` property, and the export action is performed accordingly when the toolbar is clicked. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1006,7 +995,6 @@ In the following example, the [EJ2 Toggle Switch Button](https://blazor.syncfusi { AllowHorizontalOverflow = !DisableHorizontalOverflow }; - await Grid.ExportToPdfAsync(pdfExportProps); } } @@ -1072,11 +1060,11 @@ The Syncfusion Blazor DataGrid allows you to customize the appearance of Grid co To customize the Grid columns, you can follow these steps: -1. Access the [PdfExportProperties.Column](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) of the Grid. +1. Handle the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event, and access the [PdfExportProperties.Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the Grid. -2. Define a custom **List** with the desired properties such as Field, HeaderText, TextAlign, Format, and Width for each column to be exported. +2. Define new list of GridColumn objects with the desired properties such as Field, HeaderText, TextAlign, Format, and Width for each column to be exported. -3. Assign this list to the `Columns` property of the `PdfExportProperties` object, then pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) to apply the customizations during export. +3. Assign this list to the `Columns` property of the `PdfExportProperties` object, then pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_)to apply the customizations during export. The following example demonstrates how to customize the Grid columns when exporting a document. In this scenario, the attributes for different columns have been customized: **OrderID** with `HeaderText` set to **Order Number**, **CustomerID** with headerText as **Customer Name**, and **Freight** with a center-aligned `TextAlign` property, which is not rendered in the Grid columns: @@ -1114,9 +1102,9 @@ The following example demonstrates how to customize the Grid columns when export ExportColumns.Add(new GridColumn() { Field = "Freight", HeaderText = "Freight", Width = "120", Format = "C2", TextAlign = Syncfusion.Blazor.Grids.TextAlign.Center }); var exportProperties = new PdfExportProperties - { - Columns = ExportColumns - }; + { + Columns = ExportColumns + }; await Grid.ExportToPdfAsync(exportProperties); } } @@ -1181,6 +1169,14 @@ public class OrderData The Syncfusion Blazor DataGrid provides the ability to customize the font in the exported PDF document. This feature allows you to control the appearance and styling of the text in the exported file, ensuring consistency with your application's design. +To apply a theme to the exported PDF document, you can define the [Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Theme) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). This property allows you to specify the `Theme` to be used in the exported Pdf document, including styles for the caption, header, and record content. You can define this property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. + +[Caption](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Caption): This property defines the theme style for the caption content in the exported PDF document. The caption is the title or description that appears at the top of the exported PDF. + +[Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Header): This property is used to defines the style for the header content in the exported PDF document. The header corresponds to the column headers in the Grid. + +[Record](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Record): This property defines the theme style for the record content in the exported PDF document. The record represents the data rows in the Grid that are exported to PDF document. + ### Default fonts By default, the Syncfusion Blazor DataGrid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: @@ -1456,7 +1452,7 @@ The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, en The export to memory stream feature allows you to export data from a Grid to a memory stream instead of saving it to a file directly on the server. This can be particularly useful when you want to generate and serve the file directly to the client without saving it on the server, ensuring a smooth and efficient download process. -To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an PDF workbook as a memory stream, which can then be sent to the browser for download. +To achieve this functionality, you can utilize the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method along with the `asMemoryStream` parameter set to **true** within the [OnToolbarClick](https://blazor.syncfusion.com/documentation/datagrid/events#ontoolbarclick) event. This method will export an PDF document as a memory stream, which can then be sent to the browser for download. The provided example showcases the process of exporting the file as a memory stream and sending the byte to initiate a browser download. @@ -1605,9 +1601,13 @@ public class OrderData ### Converting memory stream to file stream for PDF export -The PDF Export feature in Syncfusion Blazor DataGrid allows you to export the Grid data to an PDF workbook. In some cases, you may want to save the exported PDF document as a physical file on your system. This is useful for scenarios where you need to store or process the file outside of the browser context. +The PDF Export feature in Syncfusion Blazor DataGrid allows you to converting a memory stream obtained from the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method into a file stream to export pdf document. + +To know about exporting Blazor DataGrid as a Stream to a PDF document in Blazor DataGrid, you can check this video. + +{% youtube "youtube:https://www.youtube.com/watch?v=H5rqB_hBpUM"%} -To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The `ExportToPdfAsync` method generates the PDF document as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. +To achieve this, you can use the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event in conjunction with the `ExportToPdfAsync` method. The `ExportToPdfAsync` method generates the PDF document as a `MemoryStream`. You can then convert this memory stream into a `FileStream` and save the file to a specified location. The example below demonstrates how to achieve this by converting the memory stream into a file stream for saving the exported PDF document: @@ -1715,11 +1715,11 @@ public class OrderData ### Merging two PDF memory streams -When merging two PDF memory streams and exporting the resulting file as an PDF workbook, you can leverage the capabilities of the [Syncfusion.Blazor.XlslO](https://www.nuget.org/packages/Syncfusion.XlsIO.Net.Core/) package to copy a worksheet between workbooks or within the same workbook. +When merging two PDF memory stream files and exporting the resulting merged file as a PDF document. To accomplish this, you can use the PDF documents [Merge](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.PdfDocumentBase.html?#Syncfusion_Pdf_PdfDocumentBase_Merge_Syncfusion_Pdf_PdfDocumentBase_Syncfusion_Pdf_Parsing_PdfLoadedDocument_) method available in the [PdfDocumentBase](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.PdfDocumentBase.html) class, class. To achieve this functionality, you can utilize the [Syncfusion.Blazor.Pdf](https://www.nuget.org/packages/Syncfusion.Pdf.Net.Core) package. -The example below demonstrates how to merge two memory streams and export that merged memory stream for browser download. +The provided example demonstrates the merging of two memory streams and exporting the resulting merged memory stream for browser download. -In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal Grid memory stream, while streamDoc2 contains the memory stream of a customized Grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines the contents of streamDoc1 with streamDoc2, resulting in a combined workbook saved as a memory stream. This merged memory stream is then utilized to initiate the browser download. +In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. streamDoc1 represents the normal Grid memory stream, while streamDoc2 contains the memory stream of a customized Grid using the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. The merging process combines these streams into a new PDF document, converting it into a memory stream. This merged memory stream is then utilized to initiate the browser download. {% tabs %} {% highlight razor tabtitle="Index.razor" %} From cd412fe791d724bd2e20f5db0f33e9b745b9b6a0 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 25 Apr 2025 10:52:26 +0530 Subject: [PATCH 14/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index bdf340e62a..7ac66b611a 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -469,7 +469,7 @@ In the following example, the **CustomerID** is initially a hidden column in the - + @@ -479,7 +479,7 @@ In the following example, the **CustomerID** is initially a hidden column in the @code { private SfGrid Grid; public List Orders { get; set; } - public bool CustomerIDVisible { get; set; } = false; + public bool isCustomerIDVisible { get; set; } = false; public bool ShipCityVisible { get; set; }=true; protected override void OnInitialized() @@ -491,7 +491,7 @@ In the following example, the **CustomerID** is initially a hidden column in the { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - CustomerIDVisible = true; + isCustomerIDVisible = true; ShipCityVisible=false; await Grid.ExportToPdfAsync(); } @@ -499,7 +499,7 @@ In the following example, the **CustomerID** is initially a hidden column in the public void ExportCompleteHandler(object args) { - CustomerIDVisible = false; + isCustomerIDVisible = false; ShipCityVisible=true; } } @@ -858,7 +858,7 @@ public class OrderData The Syncfusion Blazor DataGrid allows you to specify a custom file name for the exported PDF document. This feature enables you to provide a meaningful and descriptive name for the exported file, making it easier to identify and manage the exported data. -To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) or [ExportToCsvAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToCsvAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. +To assign a custom file name for the exported document, you can set the [FileName](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_FileName) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html) property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. The following example demonstrates how to define a file name using `PdfExportProperties.FileName` property when exporting to PDF document, based on the entered value as the file name. From 5dff59c4dedc8104128cd844868f7804990b3e4b Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 25 Apr 2025 11:09:53 +0530 Subject: [PATCH 15/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 7ac66b611a..e9acf84655 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -17,7 +17,7 @@ The PDF export action can be customized based on your requirements using the [Pd Exporting the current page in Syncfusion Blazor DataGrid to a PDF document provides the ability to export the currently displayed page records. This feature allows for generating PDF documents that specifically include the content from the current page of the Grid. -To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://ej2.syncfusion.com/Blazor/documentation/api/grid/pdfExportProperties/#exporttype) property. This property allows you to define which records you want to export. You can choose between two options: +To export the current page of the Grid to a PDF document, you need to specify the [ExportType](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_ExportType) property. This property allows you to define which records you want to export. You can choose between two options: 1. **CurrentPage**: Exports only the records on the current Grid page. 2. **AllPages**: Exports all the records from the Grid. @@ -1169,7 +1169,7 @@ public class OrderData The Syncfusion Blazor DataGrid provides the ability to customize the font in the exported PDF document. This feature allows you to control the appearance and styling of the text in the exported file, ensuring consistency with your application's design. -To apply a theme to the exported PDF document, you can define the [Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Theme) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). This property allows you to specify the `Theme` to be used in the exported Pdf document, including styles for the caption, header, and record content. You can define this property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. +To apply a theme to the exported PDF document, you can define the [Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Theme) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). This property allows you to specify the `Theme` to be used in the exported PDF document, including styles for the caption, header, and record content. You can define this property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. [Caption](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Caption): This property defines the theme style for the caption content in the exported PDF document. The caption is the title or description that appears at the top of the exported PDF. @@ -1601,7 +1601,7 @@ public class OrderData ### Converting memory stream to file stream for PDF export -The PDF Export feature in Syncfusion Blazor DataGrid allows you to converting a memory stream obtained from the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method into a file stream to export pdf document. +The PDF Export feature in Syncfusion Blazor DataGrid allows you to converting a memory stream obtained from the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method into a file stream to export PDF document. To know about exporting Blazor DataGrid as a Stream to a PDF document in Blazor DataGrid, you can check this video. From ca79f75bba107229aa2f7299417b25542b377d02 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 25 Apr 2025 13:57:01 +0530 Subject: [PATCH 16/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index e9acf84655..e9d88d34e4 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1177,6 +1177,8 @@ To apply a theme to the exported PDF document, you can define the [Theme](https: [Record](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Record): This property defines the theme style for the record content in the exported PDF document. The record represents the data rows in the Grid that are exported to PDF document. +N> By default, material theme is applied to exported PDF document. + ### Default fonts By default, the Syncfusion Blazor DataGrid uses the **Helvetica** font in the exported document. However, you can change the default font by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. The available default fonts that you can choose from are: From 37e8f556c6b6b378f059673b5156b8a7c329ef7e Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 25 Apr 2025 17:35:02 +0530 Subject: [PATCH 17/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index e9d88d34e4..d3c778b349 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -945,7 +945,7 @@ public class OrderDetails ## Enabling horizontal overflow -The Syncfusion Blazor DataGrid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF maintains its readability and comprehensiveness. +The Syncfusion Blazor DataGrid allows you to display all defined Grid columns on a single page even when the number of columns exceeds the maximum limits for columns in the exported PDF document. This ensures that your exported PDF document maintains its readability and comprehensiveness. You can achieve this by utilizing the [PdfExportProperties.AllowHorizontalOverflow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_AllowHorizontalOverflow) property of the Grid. From d2410b250159607c0da9f85cf225d3684b6c292f Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Mon, 28 Apr 2025 12:45:57 +0530 Subject: [PATCH 18/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 105 ++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index d3c778b349..d9effc5075 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1446,6 +1446,111 @@ public class OrderData ![Add custom font](./images/Add-custom-font.png) +## Rotate a header text in the exported grid + +The Syncfusion DataGrid provides support for customizing column header styles, including rotating the header text to a certain degree in the exported PDF document on the server side. To achieve this requirement, you can use the `BeginCellLayout` event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class along with a custom event handler. + +1. The [PdfHeaderQueryCellInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfHeaderQueryCellInfoEvent) event is triggered when creating a column header for the PDF document to be exported. In this event, you can collect the column header details and handle customizations. + +2. In the `BeginCellLayout` event handler, you can use the `Graphics.DrawString` method to rotate the header text to the desired degree, will be triggered when creating a column header for the PDF document to be exported. Collect the column header details in this event and handle the custom in the `BeginCellLayout` event handler. + +In the following demo, the [DrawString](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.Graphics.PdfGraphics.html#Syncfusion_Pdf_Graphics_PdfGraphics_DrawString_System_String_Syncfusion_Pdf_Graphics_PdfFont_Syncfusion_Pdf_Graphics_PdfBrush_System_Drawing_PointF_) method from the [Graphics](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.Graphics.PdfGraphics.html) is used to rotate the header text of the column header inside the `BeginCellLayout` event handler. + +```cshtml +@using Syncfusion.Blazor.Grids +@using Syncfusion.Pdf.Graphics +@using Syncfusion.PdfExport +@using System.Drawing +@using Syncfusion.Pdf + + + + + + + + + + + + +@code{ + public SfGrid DefaultGrid; + public List Orders { get; set; } + List headerValues = new List(); + + public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) + { + if (args.Item.Id == "Grid_pdfexport") // Id is combination of Grid's ID and itemname. + { + PdfExportProperties ExportProperties = new PdfExportProperties(); + ExportProperties.BeginCellLayout = new PdfGridBeginCellLayoutEventHandler(BeginCellEvent); + ExportProperties.FileName = "test.pdf"; + ExportProperties.IsRepeatHeader = true; + await this.DefaultGrid.PdfExport(ExportProperties); + } + } + + public void BeginCellEvent(object sender, PdfGridBeginCellLayoutEventArgs args) + { + PdfGrid grid = (PdfGrid)sender; + var brush = new Syncfusion.PdfExport.PdfSolidBrush(new Syncfusion.PdfExport.PdfColor(Color.DimGray)); + args.Graphics.Save(); + args.Graphics.TranslateTransform(args.Bounds.X + 50, args.Bounds.Height + 40); + args.Graphics.RotateTransform(-60); + // Draw the text at particular bounds. + args.Graphics.DrawString(headerValues[args.CellIndex], new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 10), brush, new PointF(0, 0)); + if (args.IsHeaderRow) + { + grid.Headers[0].Cells[args.CellIndex].Value = string.Empty; + } + args.Graphics.Restore(); + } + + public void PdfHeaderQueryCellInfoHandler(PdfHeaderQueryCellInfoEventArgs args) + { + headerValues.Add(args.Column.HeaderText); + var longestString = headerValues.Where(s => s.Length == headerValues.Max(m => m.Length)). + First(); + Syncfusion.PdfExport.PdfFont font = new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 6); + SizeF size = font.MeasureString(longestString); + args.PdfGridColumn.Grid.Headers[0].Height = size.Width * 2; + } + + protected override void OnInitialized() + { + Orders = Enumerable.Range(1, 75).Select(x => new Order() + { + OrderID = 1000 + x, + CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], + Freight = 2.1 * x, + OrderDate = DateTime.Now.AddDays(-x), + }).ToList(); + } + + public class Order + { + public int? OrderID { get; set; } + public string CustomerID { get; set; } + public DateTime? OrderDate { get; set; } + public double? Freight { get; set; } + } +} + + +``` + +![PDF Exported Grid Cell Customization in Blazor DataGrid](./images/blazor-datagrid-pdf-exported-grid-cell-customization.png) + ## Exporting Grid data as stream The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. From d66e684d59e6f3daeb8ca24b1ef304be508ca51a Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Mon, 28 Apr 2025 13:29:41 +0530 Subject: [PATCH 19/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index d9effc5075..17758718c3 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1448,7 +1448,7 @@ public class OrderData ## Rotate a header text in the exported grid -The Syncfusion DataGrid provides support for customizing column header styles, including rotating the header text to a certain degree in the exported PDF document on the server side. To achieve this requirement, you can use the `BeginCellLayout` event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class along with a custom event handler. +The Syncfusion Blazor DataGrid provides support for customizing column header styles, including rotating the header text to a certain degree in the exported PDF document on the server side. To achieve this requirement, you can use the `BeginCellLayout` event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class along with a custom event handler. 1. The [PdfHeaderQueryCellInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfHeaderQueryCellInfoEvent) event is triggered when creating a column header for the PDF document to be exported. In this event, you can collect the column header details and handle customizations. From a16ac824c04c235943f894174d48b79df707ebe7 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Tue, 29 Apr 2025 15:54:51 +0530 Subject: [PATCH 20/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 17758718c3..2230c86a13 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -465,7 +465,10 @@ In the following example, the **CustomerID** is initially a hidden column in the @using Syncfusion.Blazor.Grids - +@using Syncfusion.Blazor.Grids + + @@ -480,7 +483,7 @@ In the following example, the **CustomerID** is initially a hidden column in the private SfGrid Grid; public List Orders { get; set; } public bool isCustomerIDVisible { get; set; } = false; - public bool ShipCityVisible { get; set; }=true; + public bool ShipCityVisible { get; set; }; protected override void OnInitialized() { @@ -556,7 +559,7 @@ public class OrderData {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/VZLINpsTBQsdeVZH?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +{% previewsample "https://blazorplayground.syncfusion.com/embed/hNBSDTVEAnhljzKI?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ## Change page orientation From c03fe63f8c11016d77054fa345cc4ff09f63fe2c Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Tue, 29 Apr 2025 16:50:38 +0530 Subject: [PATCH 21/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 2230c86a13..b595a596a4 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -465,8 +465,6 @@ In the following example, the **CustomerID** is initially a hidden column in the @using Syncfusion.Blazor.Grids -@using Syncfusion.Blazor.Grids - @@ -483,7 +481,7 @@ Toolbar="@(new List() { "PdfExport" })" Height="348"> private SfGrid Grid; public List Orders { get; set; } public bool isCustomerIDVisible { get; set; } = false; - public bool ShipCityVisible { get; set; }; + public bool ShipCityVisible { get; set; } protected override void OnInitialized() { @@ -559,7 +557,7 @@ public class OrderData {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/hNBSDTVEAnhljzKI?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +{% previewsample "https://blazorplayground.syncfusion.com/embed/rNByZTBaJDQfXHAZ?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ## Change page orientation From 41f3058a359b21846d1d63cf94cf2002505671b1 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Mon, 5 May 2025 20:20:11 +0530 Subject: [PATCH 22/26] Update the md file --- blazor/datagrid/pdf-export-options.md | 87 +++++++++++++++------------ 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index b595a596a4..1ded6caf1a 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -237,9 +237,9 @@ This can be achieved by defining the filtered data in the [ExportProperties.Data To export only the filtered data from the Grid to a PDF document, you can follow these steps: -1. Apply the desired filter to the Grid data. +1. Apply the desired filter to the Grid data by enabling [AllowFiltering](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AllowFiltering) property. -2. Get the filtered data using the [GetFilteredRecords](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetFilteredRecordsAsync_System_Boolean_) method. +2. Get the filtered data using the [GetFilteredRecordsAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_GetFilteredRecordsAsync_System_Boolean_) method. 3. Assign the filtered data to the `ExportProperties.DataSource` property. @@ -472,7 +472,7 @@ Toolbar="@(new List() { "PdfExport" })" Height="348"> - + @@ -481,7 +481,7 @@ Toolbar="@(new List() { "PdfExport" })" Height="348"> private SfGrid Grid; public List Orders { get; set; } public bool isCustomerIDVisible { get; set; } = false; - public bool ShipCityVisible { get; set; } + public bool isShipCityVisible { get; set; } protected override void OnInitialized() { @@ -493,7 +493,7 @@ Toolbar="@(new List() { "PdfExport" })" Height="348"> if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { isCustomerIDVisible = true; - ShipCityVisible=false; + isShipCityVisible=false; await Grid.ExportToPdfAsync(); } } @@ -501,7 +501,7 @@ Toolbar="@(new List() { "PdfExport" })" Height="348"> public void ExportCompleteHandler(object args) { isCustomerIDVisible = false; - ShipCityVisible=true; + isShipCityVisible=true; } } {% endhighlight %} @@ -561,7 +561,7 @@ public class OrderData ## Change page orientation -The Syncfusion Blazor DataGrid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF according to your needs. +The Syncfusion Blazor DataGrid allows you to change the page orientation of the exported PDF document from the default portrait mode to landscape mode. This feature provides the flexibility to adjust the layout and presentation of the exported PDF document according to your needs. To change the page orientation to landscape for the exported document, you can set the [PageOrientation](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageOrientation) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property. @@ -571,7 +571,7 @@ The supported `PageOrientation` options are: 2. **Portrait**: Exports the Grid with a portrait PDF page orientation. -The following example demonstrates how to export the Grid into PDF document by setting the `PdfExportProperties.PageOrientation` property using the [Value](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.DropDowns.SfDropDownList-2.html#Syncfusion_Blazor_DropDowns_SfDropDownList_2_Value)property of the `DropDownList`. +The following example demonstrates how to export the Grid into PDF document by setting the `PdfExportProperties.PageOrientation` property using the [Value](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.DropDowns.SfDropDownList-2.html#Syncfusion_Blazor_DropDowns_SfDropDownList_2_Value)property of the [DropDownList](https://blazor.syncfusion.com/documentation/dropdown-list). {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -690,11 +690,11 @@ public class OrderData ## Change page size -The Syncfusion Blazor DataGrid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and dimensions of the exported PDF to fit different paper sizes or printing needs. +The Syncfusion Blazor DataGrid allows you to customize the page size of the exported PDF document according to your requirements. This feature provides the flexibility to adjust the layout and PDF document to fit different paper sizes or printing needs. -To customize the page size for the exported document, you can set the [PageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageSize) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property to the desired page size. +To customize the page size for the exported document, you can set the [PageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportPropertiesBase.html#Syncfusion_Blazor_Grids_PdfExportPropertiesBase_PageSize) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) property to the desired [PdfPageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfPageSize.html). -Supported `PdfPageSize` are: +Supported [PdfPageSize](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfPageSize.html#fields) are: * Letter * Note * Legal @@ -724,7 +724,7 @@ Supported `PdfPageSize` are: * Letter11x17 * Ledger -The following example demonstrates how to export the Grid into PDF document by setting the `PdfExportProperties.PageSize` property by using [Value](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.DropDowns.SfDropDownList-2.html#Syncfusion_Blazor_DropDowns_SfDropDownList_2_Value)property of the `DropDownList`. +The following example demonstrates how to export the Grid into PDF document by setting the `PdfExportProperties.PageSize` property by using [Value](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.DropDowns.SfDropDownList-2.html#Syncfusion_Blazor_DropDowns_SfDropDownList_2_Value)property of the [DropDownList](https://blazor.syncfusion.com/documentation/dropdown-list). {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -741,8 +741,8 @@ The following example demonstrates how to export the Grid into PDF document by s - - + + @@ -853,7 +853,7 @@ public class OrderData {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/tBIZfMfAlknbmwv?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDhoNIXoheMzaxjw?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ## Define file name @@ -1172,7 +1172,7 @@ The Syncfusion Blazor DataGrid provides the ability to customize the font in the To apply a theme to the exported PDF document, you can define the [Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Theme) property within the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). This property allows you to specify the `Theme` to be used in the exported PDF document, including styles for the caption, header, and record content. You can define this property in the [OnToolbarClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnToolbarClick) event and pass it to the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method. -[Caption](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Caption): This property defines the theme style for the caption content in the exported PDF document. The caption is the title or description that appears at the top of the exported PDF. +[Caption](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Caption): This property defines the theme style for the caption content in the exported PDF document. The caption is the title or description that appears at the top of the exported PDF document. [Header](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html#Syncfusion_Blazor_Grids_PdfTheme_Header): This property is used to defines the style for the header content in the exported PDF document. The header corresponds to the column headers in the Grid. @@ -1190,15 +1190,9 @@ By default, the Syncfusion Blazor DataGrid uses the **Helvetica** font in the ex * Symbol * ZapfDingbats -To change the default font, you can follow these steps: - -1. Access the `PdfExportProperties` of the Grid. - -2. Set the `Theme` property to the desired default font. - -3. Trigger the PDF export operation. +To change the default font in the exported PDF document, set the `Theme` property with your desired font in the `PdfExportProperties` before triggering the export operation. -The following example demonstrates, how to change the default font when exporting a document. +The following example demonstrates, how to change the default font, font color, font size and border style when exporting a PDF document. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1316,13 +1310,13 @@ public class OrderData {% endhighlight %} {% endtabs %} -![Default Fonts](./images/Default-fonts.png) +{% previewsample "https://blazorplayground.syncfusion.com/embed/BXrIjIjeLyPqfijX?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} ### Add custom font In addition to changing the default font, the Syncfusion Blazor DataGrid allows you to use a custom font for the Grid header, content, and caption cells in the exported document. This can be achieved by utilizing the [PdfExportProperties.Theme](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfTheme.html) property. -When using a custom font, it's important to provide the font in a format that can be easily embedded in the exported document. This is typically done by encoding the font file into a base64 string. This base64 encoded font data can then be used within the export settings to ensure the custom font is applied to the exported PDF. +When using a custom font, it's important to provide the font in a format that can be easily embedded in the exported document. This is typically done by encoding the font file into a base64 string. This base64 encoded font data can then be used within the export settings to ensure the custom font is applied to the exported PDF document. The following example demonstrates how to use the custom **Algeria** font for exporting the Grid. The **base64AlgeriaFont** variable contains the base64 encoded string representing the **Algeria** font file. This encoded font data is used in the PDF export properties to specify the custom font. @@ -1347,7 +1341,7 @@ The following example demonstrates how to use the custom **Algeria** font for ex @code { private SfGrid Grid; - public string fontFamily { get; set; } = "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AAAAAAADAAgAIwABAAAAAAAEAAgAIwABAAAAAAAFAAwAMgABAAAAAAAGAAgAIwADAAEEBgACAAwAPgADAAEEBgAEABAASgADAAEEBwACABAAWgADAAEEBwAEABAASgADAAEECQAAAEYAagADAAEECQABABAASgADAAEECQACAA4AsAADAAEECQADABAASgADAAEECQAEABAASgADAAEECQAFABgAvgADAAEECQAGABAASgADAAEECgACAAwA1gADAAEECgAEABAASgADAAEECwACABAA4gADAAEECwAEABAASgADAAEEDAACAAwA1gADAAEEDAAEABAASgADAAEEEAACAA4A8gADAAEEEAAEABAASgADAAEEEwACABIBAAADAAEEEwAEABAASgADAAEEFAACAAwA1gADAAEEFAAEABAASgADAAEEHQACAAwA1gADAAEEHQAEABAASgADAAEIFgACAAwA1gADAAEIFgAEABAASgADAAEMCgACAAwA1gADAAEMCgAEABAASgADAAEMDAACAAwA1gADAAEMDAAEABAASlVSVyBTb2Z0d2FyZSwgQ29weXJpZ2h0IDE5OTMgYnkgVVJXQWxnZXJpYW5SZWd1bGFyVmVyc2lvbiAxLjU3AG4AbwByAG0AYQBsAEEAbABnAGUAcgBpAGEAbgBTAHQAYQBuAGQAYQByAGQAVQBSAFcAIABTAG8AZgB0AHcAYQByAGUALAAgAEMAbwBwAHkAcgBpAGcAaAB0ACAAMQA5ADkAMwAgAGIAeQAgAFUAUgBXAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgA1ADcATgBvAHIAbQBhAGwATgBvAHIAbQBhAGEAbABpAE4AbwByAG0AYQBsAGUAUwB0AGEAbgBkAGEAYQByAGQAAgAAAAAAAP8OAHUAAAAAAAAAAAAAAAAAAAAAAAAAAADMAAABAgEDAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBeAF8AYABhAGIAYwBkAGUAZgBnAGgAggCDAIQAhQCGAIcAiACK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"; + public string fontFamily { get; set; } = "AAEAAAANAIAAAwBQRFNJRw5vA....."; public List Orders { get; set; } @@ -1445,11 +1439,13 @@ public class OrderData {% endhighlight %} {% endtabs %} -![Add custom font](./images/Add-custom-font.png) +{% previewsample "https://blazorplayground.syncfusion.com/embed/BjByXSXoVxArjAFT?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Rotate a header text in the exported grid +## Rotate a header text in the exported PDF document -The Syncfusion Blazor DataGrid provides support for customizing column header styles, including rotating the header text to a certain degree in the exported PDF document on the server side. To achieve this requirement, you can use the `BeginCellLayout` event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class along with a custom event handler. +The Syncfusion Blazor DataGrid provides support for customize the column header and content styles, such as changing text orientation, the font color, the width of the header and content text, and so on in the exported PDF document. To achieve this requirement, you can use the [BeginCellLayout](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_BeginCellLayout) event of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class along with a custom event handler. + +To rotate a column header text in a PDF document, follow these steps: 1. The [PdfHeaderQueryCellInfo](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_PdfHeaderQueryCellInfoEvent) event is triggered when creating a column header for the PDF document to be exported. In this event, you can collect the column header details and handle customizations. @@ -1492,15 +1488,25 @@ In the following demo, the [DrawString](https://help.syncfusion.com/cr/document- } } + // Handles custom drawing for each cell (used here for header rotation). public void BeginCellEvent(object sender, PdfGridBeginCellLayoutEventArgs args) { PdfGrid grid = (PdfGrid)sender; + + // Apply gray brush for header text. var brush = new Syncfusion.PdfExport.PdfSolidBrush(new Syncfusion.PdfExport.PdfColor(Color.DimGray)); args.Graphics.Save(); + + // Translate the origin for rotated text. args.Graphics.TranslateTransform(args.Bounds.X + 50, args.Bounds.Height + 40); + + // Rotate text (e.g., -60 degrees). args.Graphics.RotateTransform(-60); + // Draw the text at particular bounds. args.Graphics.DrawString(headerValues[args.CellIndex], new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 10), brush, new PointF(0, 0)); + + // Clear default header text so rotated version is used. if (args.IsHeaderRow) { grid.Headers[0].Cells[args.CellIndex].Value = string.Empty; @@ -1515,6 +1521,8 @@ In the following demo, the [DrawString](https://help.syncfusion.com/cr/document- First(); Syncfusion.PdfExport.PdfFont font = new Syncfusion.PdfExport.PdfStandardFont(Syncfusion.PdfExport.PdfFontFamily.Helvetica, 6); SizeF size = font.MeasureString(longestString); + + // Adjust header height to accommodate rotated text. args.PdfGridColumn.Grid.Headers[0].Height = size.Width * 2; } @@ -1711,7 +1719,7 @@ public class OrderData The PDF Export feature in Syncfusion Blazor DataGrid allows you to converting a memory stream obtained from the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method into a file stream to export PDF document. -To know about exporting Blazor DataGrid as a Stream to a PDF document in Blazor DataGrid, you can check this video. +To know about exporting Grid as a Stream to a PDF document in Grid, you can check this video. {% youtube "youtube:https://www.youtube.com/watch?v=H5rqB_hBpUM"%} @@ -1752,18 +1760,19 @@ The example below demonstrates how to achieve this by converting the memory stre { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - //Memory stream to file stream exporting. + // Memory stream to file stream exporting. MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); - //Create a copy of streamDoc1. + // Create a copy of streamDoc1. MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); - //For creating the exporting location with file name, for this need to specify the physical exact path of the file. + + // For creating the exporting location with file name, for this need to specify the physical exact path of the file. string filePaths = "C:Users/abc/Downloads/SampleTestPdf.pdf"; - // Create a FileStream to write the moryStream contents to a file. + // Create a file stream to write the memory stream contents to a file. using (FileStream fileStream = File.Create(filePaths)) { - // Copy the MemoryStream data to the FileStream. + // Copy the memory stream data to the file stream. copyOfStreamDoc1.CopyTo(fileStream); } } @@ -1807,7 +1816,6 @@ public class OrderData Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); } - return Orders; } @@ -1867,6 +1875,7 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st //Creates a PDF document. Syncfusion.Pdf.PdfDocument finalDoc = new Syncfusion.Pdf.PdfDocument(); MemoryStream streamDoc1 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); + //Create a copy of streamDoc1 to access the memory stream. MemoryStream copyOfStreamDoc1 = new MemoryStream(streamDoc1.ToArray()); @@ -1897,10 +1906,10 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st ExportProperties.Theme = Theme; MemoryStream streamDoc2 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true, ExportProperties); - //Create a copy of streamDoc2 to access the memory stream. + // Create a copy of streamDoc2 to access the memory stream. MemoryStream copyOfStreamDoc2 = new MemoryStream(streamDoc2.ToArray()); - //Creates a PDF stream for merging. + // Creates a PDF stream for merging. Stream[] streams = { copyOfStreamDoc1, copyOfStreamDoc2 }; Syncfusion.Pdf.PdfDocument.Merge(finalDoc, streams); finalDoc.Save(mergedStream); From 7265e5468d5a3ef41d9a8be4ac0b96ebae4ed172 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Mon, 5 May 2025 20:47:52 +0530 Subject: [PATCH 23/26] Update the md file --- blazor/datagrid/images/Add-custom-font.png | Bin 111829 -> 0 bytes blazor/datagrid/images/Default-fonts.png | Bin 97707 -> 0 bytes blazor/datagrid/pdf-export-options.md | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 blazor/datagrid/images/Add-custom-font.png delete mode 100644 blazor/datagrid/images/Default-fonts.png diff --git a/blazor/datagrid/images/Add-custom-font.png b/blazor/datagrid/images/Add-custom-font.png deleted file mode 100644 index da5005dbc837339560d52c05ae4948a1c4bde2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111829 zcmce;Wl&sA+sBCncXxMpcXtT{cXt@v-5r8E1PksK+zIXs&fxCBW%E4u{l2xe`)O-y z_rugoclDe;r+d2llHY%#Rh4Cs;PK(Xz`&5?WF^(Wz#xafz#!~kq5sxUC+m9seFJw@ zlMx52ohCf_TliunrX&Ui){uzsW&-uM3xPngbl9VW{G;e=jF~idXT(@}Cd? zDXG<|iYorM8kVfY@JCSQzl~(OCBfPLZIt8_4PpAvcVWr?phFG)@0Fi_A0B;uR)GEHw z($NKXcMCBxG7fzc9}6v6Ig7XWQCdoMet!Pniu8;Ot1fDH4-ag0STdB@sw#$kmyV|j zA5TnFyB6J&l9H$b;+`}HEpldNCn ziEdP=(^O`W@00O)-dfBr5lb>|cS<#nA8yTXH=cwy64_}19tw=g`cpFb(uygv z#%C8X3I1<$ybNeC(}(05{S7Vj1WdtM;e3SMglHS3Xg)11gL(Fs|Cb@Oooddq0p1>I zoC_NT`BiY?`(zKc2IJ)86Ncq4H#~7HlBh?l&l_~o(-xc7?-rPsU^neW`=^iD&z;3H zd#%ZsW`prd617L<(cC3fK}{0nT|fQw@R~1hx$C8;r2HcC`Nr{be-ipTg(kKlOb}ME zQM|bR)rwWvCM(N}PiBmTbSe>shR)fo*YdOU{0+d=UmA6|tGp|L<{58Szr$6w@ zRs=vo%4-53Qk}4)M)|>HyYt@8?yl*Z(6VCeSk2M(T?AvQZjRW1PT|tdL*|<#9CEJP zXp~s%tc(n3Wr=PKd)zGx61ryvEm0sN@62h$f@UYDV$?axE-b58Fri$qGQUd!itN44=3pBJ|Lj7o^h1HPLF)%K}|uu(g%;P@FcPYp`P!CK8k*O&1l$#JDNx` z`nVm4!otGB*5c#lE_up_eBz4&`n@Bx=rj8 z`@wpxoXapkI^_LMY44DUNwg{Yf^}EU>L&{EU=*@Q(bppfZ8zm%mqTHYJm6`f#d^-1 zj=EO0@Zb!x-gys|QGb@CK$u~)XC*Myb%(oJ!34@aZ!f8y529Qr>B-5G2s27+q@B#> z9nWv{VUNe?VleZ@3efS!$|a$??cvoz61kb9;dQ=*jERULeu)7m$j?1Egkz9gKl!cI zPe6p&GE~6qR3Ptqtt1_Hb{hTURh-R9ioNl)1n|{ly~|8HkQa^MD1RV*LwETiv$N2M z28sKfwED=V+S0-xew!21_)dh5(XGY~KR5rK$EPbT!lMAG-$)_S_<)6Ib_b~3e5(^_ zRBIQ1X1T=)mWR1=6Pi?aSG%h(_Qy`Y{sQx(O&BebC%>dDyn@TM5 zF>*H&q+HLP&?L%=kPzs*3b&Sd=HO zQ-<$|ATmnec~t7c%k3t8md|v3^UGPA6$sCFGx-!*<2OX`8EI3E{g|w1SrhS%E95! z%WZYo@Mew5=F9vGeNSE-&34C%N( zk)2tK?S8eSXa(^?L6FZ_Auf6>ZuSQWtqx2>U&KHB|DJY#GT8Bqday#OqM6Vp$LW}Pzzcc_V%lH7+IWk|Ix_P+y%aTl)xfT1mx=rAg49J=uNv#? zT1njdmNzmac-u z2+2Xx^(;r)Wp1CzLuv}r?0VAzcO)!BAKORgpTiI*29rDZF)CRQYDN;>vR=C54p$-4D}XKr9`eF9p%d3T$(JA{{S zT}4f+73n$K$oTeIfZf_Kx*|N!iryMORf- z2}0R>c9dH~VZ}w`X^bE*nE#v7b75>(+_uM(iKPA5@cdP6KM-BlGI9&jUv=}{eDs5e zwIdJUD;^tladb2IX#c81{Pv`Ry%-@*Xy^mIjo{6G#rYxlRc(t=F$Xoi&S*0Xhx&2| zrdNOT@cGEOFtwCM%0&9p{pmCpnouj~U8L#i!;5HTe626-&~)_Cmo@m{b4X6$`s6z$ zWrk4b)M38cF~ni)+4W$-Z&|sx!9=IeP_dcXQ3luI@KKD#s8uXjA zwG|t6^!n@f3oqw4YQ;?K5VMnAU9GMB6e?EC5|h=qKvw$!I>KJ1J6;gxr9c2{y0UXH z)Vf1g(U}9;~yA9?6;bzRGs4xK= z@kcN<{jPO{qtjnnA^*S=zPpo*ARERPVI-RB4Kq*#x5CO`Uye?&IF2A-JnXKR4P%A4 ziOc$%%EkPCR-Tk<@u1Cui?0am|Re#LB}VA@i; z&7|*PB7xX5o7<7bo`eEb1Tg@&=hfS;k9SdFbdG=$@+uw#>Th$-4=YpM)BI+*O>><($R|Xj;r3yO$_IL8V+YTZ*$2mn`+n) zq)=fGeMSGTNjSf-{^zpj-@$nF0zY1_?Ua<9@ z5yg_(461$-O=zv+`jJL_jqI(yd<=7vF6H`n6T!8+EybkKGD)5HsOj=&EkzkH=&4@t z=XlkpH|{;*{rL>=SwW7z=e!qj(9-J1L3wEXlRr*wW)C{i3(;tnsfiEWn~xW{=Yh!{ zzu(gwbDaMl@?9j`u&czO`5EqdQD>GBm5v}@Aq4^4aFL_>!pHL5TLh%3G*{d;cdP(L z+mYo9xaJNw)OX*jAyd`Z0$CroD4(w38N3b3Hp7zrt@5$D6cX(F$Wu z|8}hfWuuO|PyxBz`F;rnei4|`-OET*G5dK6Z`okevu+61vb6{YLJ~yRyy%A!kXOx4 zjk{n-Fqzzu;HBSyS;iq{)P=cgeBH0EM;%A(Zt$%5W%B+_PjGu^5mToiC86}HTJkQv z>IQVmh$-i=vpsgZ9P3sKR<*?!M3kjVnHM(@!@_NHJsORwsdKoF>OWfh%;KNDKPaWsN}rSuNzN$B zf}ESvc?j&@Bje9yg(v%cpRU_WOGTaUDE=ng$d0{ne2mBMCqAq5j)51FV|jm_(nWPa z7nj8Y8kgu6KKrT{F4-w#2fFmAYSGCVG{<52of8WO+XoBUfpmwybBf}dIdw;Co}X}Q zS+4E36Jm_N$|5I4PzO6RCARAM$`U-f4`8gK5c~Bw%#tq%q8j{bOo(?9^T7p8HHim* zFbu3MH8Yw>8n8!(c2717k|naoo}G8l`P&PJjZ0BP^PLk7`_)9J5eYIVF+8?Pt@_8X zXS;%cm=>ZZ&vx1_@}bfc&^wPSL`8IIg{w)^xJ#P$l{D@nL61JBhp$Yt;~^JSB#*|I zbX+B3AIIC@knhTZk5}|VHZVqS9^Moe9&%O(CzNoF%`d&q>d>^W6^sG5V$n#)JOnxE`qE^p!*rzJirv^>^T6`sS57!?d9 zi!0w}oIun5#~XkOKhY_MI!(EpyPJ4)%>wfJ?5yWpFNm28P38yi?VuL-)&rp#i-bEJ znzP@R!*}=nmoF@Sy4xY7Nfl&~E3A!d$?yO>RY{J1T>KuRk}$L;zmY zN+%qR6EfT=I;w?WoBYnM9ZF|R)`09L(T;-y{_-!*(L}pfv#kONwwgT5E`A&Z%SiIZ zTja{`c>I2>hzQa^yjKZO%d_^)xaON-0MECQgi#e&vt+~Uh?<-`6Tr2k9jFGs3p>MO zh*Uavqq;xdMSr=G<3m>fwbyS2x<HdI_KaD%$Df!eERi)YlE2< zck{Wg8jHXau3bJAz_X1V8ifZCwTd3xB%VXzN`#&`w6~K?xL-dIvU0Su|64vjxl(u8 z{|O4gvwtEpYvS~t(z!U7ThtY%rlHD@xdt6n76AYa9#HPym1md&SLk4$cIXt_HwP_V z6zzeTa9rzJ=vD*^t`q1CynOY6I)%O#6YlyLq3wq8?-z&g^)rrXCp%L zr6*xD#FFB_qvH{pvqBND4vv_I8BubZ(kN>RX=LWg&Bw^3$Ro-Zjvs!IV<}%XnMxh3 z?ux?69k7X)x4vGl77g_~W7nCqCVidJb*Ozi5=4aEf}fFx5s5NFBsHc46;H9&(iEPx z0WZ9TorLSAnhlSCEl(sr-d166phLP1gk!ePkgL|gqc7{=^5FJBrZ-u!9WhNy%Nh>H z_c(BiTu}~N3^|DtlkKLExJzed#ZW-5l@0G2hf3@#lnzMt`jN5Pcm>Rkn5b_KqE4%{ zaSxZ3#ZsW@s8*9Pz;cdCWMGFz@cYWPs~(&5-BvW?F@N~hV#d^VM!w%uW1`Y77rmp} zoXepB6MV`b-gD|KM5nN-f)pD-C96>7=j`G%Dd5rPJF}L3sb2-(@Sd`C{2@=-IP9-a zpfjzVZAZ@NC<&t%x5V8NZelI%(f2Viozh@f80~qn-Io(A_vfub^TQbU! z^!-Or?Sz?jmme#(iUaL~t)Vo;44Bn7{&Cx>ikTGc_mc+#o z1_ldic$NpS&ok(I;y}EcUB?|;Ad$vqDy_<%H*Oq(UJ&n1nyJ(Yl&lh+c;z(A6%%os zMQrDfqbULf*yqG1yJbQnrsFVfo^7Ps!b;aIqV#z3yM%ya+peq%DZ`$VA%pC4&aJ`} zo?EFzd_y5C{yezEg(!;;|FY-_t_Lo%JL{;n^q#n}SPC|~Ooa2HrO8!y;y{_@AGw&> zF55Ts3ZPTVUk$%qhh>>MEh~^{0{vQE)FzRViIzh}}{{bYhXiO!VKLe?U?p`rT9mcnl+_0?Jh5Wfd%;;14Xe7K7SS&locrm-x zc(7L6B?Dr>$qkSQ6y+SKIFO}5G`p2d)p(%a`yB@KRhNvlJG=wuS1Sg~;-U|(z}bEa zEt+SzyPZ>W_o%#g)8Qp7r(+ZJsOJ#bcIqTxOqoF%>(S&gei4}h8*wm_$gvx2DVHzi zXe7V?hEPTEy#rxw**(4{i$M2Fc7p%#jrDnFLj$WhL(_` zQH&`plx?zKuj%#2o98D7uiK{!`tE>?na|$?{k!(8hDOI%Ekr2bwcdep;pE)qR6g#- zXgZUpq_IXFbv1?{COqgXanTq+s!G5x;mg)vQ?3rB+t^n@EG2|*#$n)XPrf;iAMC2R z<_v#b=4vha?e%YZ_y45T!8`Pb-Sc=&vcT8#**h_w*5oi`jUx*2DEBP|<~v zWp<*V2`f9sB~9EQiy|WN56|)&-n{Ac$}~D|jM~lJyyRX}r8sE`mxl+X*dWMZc1A~* zemEkl^Cn{!0bQVoB+nCGk3HPRR$G(Hs|B3jSf={gpJ-g^E*y7ObN*!M@R>r&bbAkSDll*>5&?Ck!Nij^(9kR zlA12&qCG!4Zp{)8I-c?fln_>52zZvk2S;K0vK$yQuoAMIj7Hq4Cf3g-CtsP-cgd7s zpH=21)IGK=t%e8&HQF!u>e4MJ7<%Kz$JuIO8E9&Un`4)%czbilZ~H*;Cl72z&`$X2E1Lzo#^bdzl>?0C$M&Z6`vW$Q?g_iH=TIE z5|CDu7%|(C&W|0e&P6LXe;sO;?D6A&z}ow$+`JJR%S)QF90K9vAwtt)!fR`5_l=B5 z|4rp25DUe;z4;;Hv43&#ZbA8pswUKd#2=3+t#ziRzv>U(d!&)e97^Q1aYq7Tv=s?dfSu@{0gw9Y z83MazN-8$r16IfgHX)4=zlCt>7nkTBbiS9MYY`jM;Qc>-x@kx0m znV;&EE}(f0_KLxt7H`WgPZr9Pv$CRV4LS!#M`aXi5)g$q^-LvkTrr1A8!oz| z3>xrhb&PR*+0gW~4Ev1AOL0Gz)N!fY0vV0P93;xo&)3ous#DG1x+#g*gahh%zuTSz zBrDQ?c+W^%pQJ{{i|7v=Vswl#&=e^b8SJN)$a^G!xEzu%aW3^7iLq4a4~=gVsg9Cl7@P^n8QS z0Z4qIG#Ek&EFsl_WliHB3-#N<3Lw7IENLptD@{8!*_uaD;c*qu88uM#Vka)D7;f+4 z!W3cY3c;8+_WR>(*8T$(=BQxcN(Lc*<`)*uDQImRhUiVP?rUWXKRT*dh&Gi8L*NhBc%_=fYySl+zJ`NDAd%b01yRc%fd#3H-_ zs2FTpS5Lv45(fO1I|)@2cH}VnBo99H-cLW`DrH&L+p2u8#&a3TQ+-`s{OLRan83im zW~XgKMXG(Von$QhaHI)|1~)6_I3mFtTXUQ-V>=7*ZR*yM$BT51MZf73-i=!OX7RNm zjwc^6MDkeRk9+)Md!cLX9Kkp4KkT(b)TYC`u}^y|u1`1Ru225YT<3ySLH=jZ)|Prf z4n_qd@S4!JUc^-RuFY4JqmJC00cKehk@CA?j@^Pg7G?-4%t(63`^B_m;0&!lXV3DK zk5!+sVAAZjy72yHjB#0wgEG~)mWI!ObT(1U&uH51!D$5H@|0oHrXP_<$%|Di%O4x? zAK2&T_(ails~y~wO0euLv)aBzDH@0YFMP;s;v{IcM3f&r$0wPgQrlt1o+S}^oqVas zlXEW((ARC#!)4EC?IYv#1Uw7?JgIa1Bl5$~EJ*LR%O_W7nPybT&zzrkfa5EKCl}(* zeBR`6!7M^$q|F_@n->Y&cn_5hax)cbL7HZ98E%q_G;q+TJ$bQeUn35Ttx=ODw{}I z!>zjzm)hd#3eVwA;d^gBtW`YJpp6ACg(Ki3rKW}jyub8MUvhi;NuuYYMcS1t*(QJg zZkpTB+1Z)-at+(yr>KaS&ZGye;2|bECIkZB_;W#m7*D^-O@h#Nf*<-@%eIiN;3Lnk z&2v@2@ZD{qEPvVO{%#coxYF=u2({7g%EP1iP!sT}5i}p4$4jSe=Ul_)@Hi0<3=FWk zpMG<@+|W_1A+oSUW;U9TDGP}VZxYIGxsfz0uMDNOP{UW&Ul^zgWzqH3bcUQ%4SV`V z!0BSrzg1z6$=^{dVe}%Xc7bfPn3NvRDrIW6v6IKIX4Mw!5VUyW zHFCXncPh5G@q|#u63#J0#&CNbb10l?tKvM&d(bV`Fa~ zy#&@u1WUZz`w9%qap7;BL2AtGOW4;=SD~63Y0jPsc)>V++@=miUxe$rf`HGp?UUoO zPz)5EjqHtwszsKkVS?t~oqZ}@tsr<8=UaQUYCUdA86%GLLh1Vo%%R``G%kTm|F?wle@Kzb-`!t^!jgW8fwNUSF7jz}xbpM}SjCpV{OU6tfuM$ju~0@v zwvQUXvaz$5BaZ2Re0FJQ1;2q*rz1^xEspjIO-=f&6+ntQ$rt)Bf%2@iKqwT85-=sX z&<3;n%Gb?mr^zyzzW}q%gdeB!vi@VP(DFE-U|avmdUq&*#LLVGwWSt{qJ+5UU*_el zO6UG0!D!1VY~S1N`n;XU%j!i~(bpHJOmQQ$8yvFU%7kM2w@2k-I9ma2`Jv$Lh4-jWWFjEM8b z1J~A;PY;g%PEJNaL1I^z;2yx(xbVj4FX4iNfnoNR5fB+BC}`0;SY8l-zqPeB0$T4V z4r*_1#>~pf+NJp)QfPn9%*FHCX;82_WuYt`gR3j z8cL7Ah6gvMdZGxYPZzV8Yx9H*$YvbEp)JG_S)uc1V{h6+)l-cks49~TsE{Y@nVIOt z$VI2Zcg}qC#e+}Q_<<#|0lmJB$A?GD9#!xU{Pc`dCDN_siOL}829IA|-Lii%$wm?sG zdPz_x{PNYMl&KvYFw1G6*d#PqyBGI`p~D>3k<}6)9iv0gdUDoY>m9zxaGDjTV2d1v z{Iyin{s2`*DH7QW-5S=BsX3wwAVz4L8r}s$0B*6pt}dW5X*UUQE&LcA`EB+6NF>;PS`ACw89x8XaL>sG|c zdFn#9A^w?z#|WRSo@j{3R;6LzmG^7VkWS{DFS)Sar5)orPSk`I%FZw8pH?lRDLVny z4w_+I^AP(LRdq~z_u*q&_+i!%&s4T-e~1CzyuV!8Up{VxmKlES9G%!T>~`>6Kcv)w zQi=*plxY|U`5I8>d=|Q6Pc!NUp5Kj(zm7mw@*K`Loa_@5BIqOz^3c~!{LbY!QLAUc z6c4~=DBRc1Hj{}%xD_u-(o}<3%F~)o`Bi8VeBDsMdQ#rtWpiYiORriqV$g51dPChT z&svyz(VOGZ@xb1*eN99D^Y9=1?JagOF-Y4V-j1bAbjFqS+fS6X8z1Ctk@YLZY=ESPoGrwAhQl*VM@{N_CSE2vDGdL)z`5sj-k_DC>nm zd61RkkHep+=EKUgOfR z{#Dw-dWHe#PF~Ijw)!g#g+}GHluiuGj@lvreJ%k*2IWh*r)e){>Xb<7<=osZt)YXizDlrbjI1xTUTn&%!i!u z;yELZ0zc@n&^dp@&afei8MRKGciIZQvX_Uxl=*8$3&VieXaJ0KP~lk8=|@C4iE2*x zMPnUN#nBa5324$O(N*WKuf+q&wp|iMl72qy@^KV@>`DGw7?3sf{8$eftA0+i5uk$2#oeYQKj4kQsdy8!l@x}R%@6y>7& zZ*YWB3DTOY)TfOAzL@uq@AFEpDgQ+%llV1RAWSQi2;3f0o5+M3f8gweU*!*GUaX^P zjx!H2b(#VYGUW042UWdrNtk@lDAK#aj{*r}%6W)*pknojne*OYH!VHFKV>%AcD?AE zV;G*y4oJWF4b5BjL{;Q$4b)Rznaq=5%>IL$Fa9y)1Qs0U;{2h@6P&FR%jB=CNsNf7jA!s zbg4}f;DD9c=ONC``S(XQ@84hC3IxELC|u&aHNLyTl6)=>wqJs8v-C;%lhx)u!)^{= z5WD{nk8c(xCg6z^%P8m>{P=+`N$5?~9pH~M*y~HYz--ZItQFnPuwD2$I^fw^G;>)s zOG|O{xGkahdcLRC&|GNmNC>~1u@~-SIHUy!6(xLw?ZcQE=?^8&X(j5jVH%h9p6T4Z zR=t@xQNArz=VUbS6Uxaf;QQ>?9PGIwqr&Zth9^ovgqS#yo42lLFPk~Qy+Ip{&44MV z9I)G)5h8wcLe?*@S}I^o#Os}4p$GoWA4zR^2_(+~%Ak^9vtFUvx2zfFZLQW>33Kq7 z1vX?iBiH#m=#EnN)<~n5%M4|8JRO^7-b5q_dlGDYxI;wP3kSVr-?BY;3bGuUot18z zE|Xxe`JH@=dv~Dx#iBhH@_CT?c4i)@^Fp2fX+!(s#1~4w5c4mlYjr9mim2n-^}J#3 z*38+$cgXdd*KMBz(H!TDBw|GK>+4YQ&oPKWYKP%uG6NHEtRLbZ{oo*Hg9?FP!pjIu z^!vFt9YE}0RB=ZDoUDr%OsA#eXd|=mjy&_u5mKzP^7-P6rB7J-NYsq!_>TRNefH?Z zw+6qCM{7o0AjZSMp&WtfM(i2D{N)ID+Z6rq@yxaoe7~i>@g@REFT`o@()vIEwm@hd zCO!;IzfLr{VSEWJyzxo8P=|?#IgbzOQJLb#w2cNt#+U)sCZKX5WjSS3D~j^?AhLU3 zO{Bfhgr@2P)$8;G=Lb06%X`0_eWyTTU?oO;DzhJ%1`i;A3#-8sQ z)wk=uZDw~vWZ_1XG{9lZ`||otUxqKFGcY zZ`9mf?@-jwodb%B3mN+TFEy?{`YjcYW&B7=;!=~N2-+U%q z2Q3+=WU=F{1USQ67Kw#I1aL!%{V&Drqw7we<%#JXbY@2gKD8J$7<+Bio;Q~et=+l#|qSH;Z<{XY38hMjLsxj9NUXmkYPX~sfvTo(Hg6xa5xc@OlPgM`1c6xu4E(SFg0)1h7 zyzLl}mA$ZLyntEU`7@()?-LEZzt+lc!DLY!hKV~Whs$sx_mLd|Xu{VWQ4?P?(VfUc z+ls4j_nm2JnSWwtu7FQCW^U;GgtO?E9fGc&(EzDw!-uSKaX}|iyLdq(4xgzA#%pqO z5urm)**6!c*LJ+8M3-Yk9q7?%VV8`$Fun&&%uwCXtMcM=sB-XKio|t#J@xK&yN3liIWE zx&%8Whf~ zQrzOMBLm<$R@d75vt4ey@5J+wzugWgha#BJ)#S%Wv(bzSGm+}qH?s2ZDDz*CUG`#A z19+Qno!LOFKx_xWkUqq)hi2i|+K}*j|Da`VzR`9#XAEtl zngbvA5hC%e8h3%C%w0YK+d$?=xhg?*XIyV$ZJ)H10wNptYd69R!;`=`d|verXZk}z z<&j*O5D6T&CLHb%30ok)z1GHr^q8@k4F&Q_+(PP)MO>QAb~I-eHy`zNk7y;DE^a^U z9uh8uJDHh&m163mM2F#m*e}?Jnq>sw7EfxaKb6FCO2*&)BN6${RN;7weCrb9&u#~g zSD#Lvb-c>6?wCXjL+PP1&<9b!1NN@`e4xW*CPnHM0yX6wcwjdQ1M#x}3zJTG>%V>ZN&oTV1vgt_Jkz zwym6>kgN?Y0_&^LLj`(?Z+$c%_l5iw3JMR70HI%hZ4W1s$-}>3V`dN!Tk*=5 zF3pFPSE5Pl^*(Ki@hWALgN`o?Q<3-xsGVQ^2>Oe%s%(V^izxL@(8MyoL>W=Ga~ti5A4T=*9bUOHwZPv)@ z;=AO3Y$}+Nt#3=m^O`0jmrY}}0JiCqR9ddFx%NG4L{3fl^zQOZDB~_VMUWTdD@Mfl zhXpUU!LxB`m2XkHs`bD`>R}0KY~;|2EXWz(i0u4pQ_c%m-w)EBj($QSfqSXK8|(Sq+m04qI&QHeZQ<A$ave`W6 zk-?7Q))hk?RWdpOXUXW^_-JXxU!xH=;-~t(F*C5m%T@Z)tI*1*Pwk12M)DYB?zsKu zbbl_d81xO)B!7a(Kw7S{Tl%w zj8O^-fl}zyhmFg!#~wa2TOw-GiqM|C{s1fSn{l#JPd9y=XD77yhPT|>N_ zZ||e!do%qVQ5Y$dREa;B15c~r^<28T$MB2H9p@13eGC|fu<&77Ur znotQCMqSbf%K(zj)8&k+r*NieYcA+{siM)u{H6WQN@kqOImVf*2Y0>#DCq`ZD9X5(2C6Q3=;{n z|1$FAdK-4{I|2U0* zF*SIutp5>WiaUn>f34z_8{pUl#LFuv{7tXY1^95vmSQeo+_J)zqee@T2atyeBHjy7 z?$7l(6B^{8-$q?uUkA0cwEUyRWJr@YH#h&Q#Ux_Sic=O26QtzNQznG?yY~-~{S7=z z_DYBoBU$uHy%7D?sHMImcXxH23X?9|w#drK1?S}vZES81FGkXkk@b7gOmA-&{C!qp zbP#nGph>YE!OG5#p$uJ|xa9kHbaM-f{;e%yM@Ps1N-FFDU{o0>xZ$%s)>QU>kuKE1w5 z(3b-9lOo9|C?Mra(TRzP>swl|)c?vy)#T*h8XFspot#j3czFI3$uArp9u{NH7@V0= zQLG3dLwfE+p?KBDWe{1lXqSYqNJA>=f+l1%K0Jl&d{7yvvI3jDTsUAV2*8G8Xe*?Z zf!V62dh5yjf`j0^FHtOcQ!A1L;KlPXM9vB3n7ya-lpShtmq7S)&@F4&OW;lClll76 zKfjE~o*~+PZwq$;Le*9wMxk+acDb!f&C84bt7&|Cc^TN~I?R*%O8Kvu8#4(r9XirC zNJe&VnYEKm^k9}Zt=qCU)W2VSw&i=H9D;*lExx;%_t9EIL zn&M)C2i3bwRuNSrBS2sc-CCillABx9=$o}}s~BYHa;gslQ%-I3%ij!5D=1;9o-p}i zNCkHLJ0h_qz|Rpew`Ld(Yb?Y_w0M+ZyTrItOaoTQP>#tq!LE(DZ7>Z}wCZox!trP; zL&~x6-vm;UObB>(Gvb4hv?)rbCDH`TGE(#_>hlLod#f=Tc{%cM53&lmxif9E__vZo z@c{xeXB$^?gzs*&Pwt2bh=j2}T~{iVQEI5aFAY&ROluPs2;#66#Em4w-6f?t!p}a1 zEJP8mqm)~{M;xD% z270VJ{8WRB@eGW2g?!x|yY@tF5kW4))eZel{2Oq((~MY-~Wl)eGH?Iy9W1~?}yb;BvodyXqnTY zzyI-qpMbC+xP&um_=?771AQ%(Ec@z%o)G^677ZF6*eLAn0XLy|+1ZDQMZMbs5E6+H z(0!HPYZv%!_48Y@e2`TFY%seu4`Z!Hw&|; zfh>K7c~RBRO=y96;Ze7wPb`_>C}t@}9K78v*xjCW(yAHh8s(nVmBmHm<}?0K8OxO* zt|NtJ<3VJ!z@6R5DplLrV(Vf3p?sKJ>E8Gq7R&y+3VePlgpq3e!QxIHH#j)jc;Sfs zL1b9nXC{2Fn^}W*0=7@etdOzn)*|`V`m=e$c|Sb;?Po%zS13{I<7y#p95RmO0ajyV z-9UC6@F@yZfeQ&rYR#{mm2fisOKJ=Ci$v*$7D}Z~RIYBE(*+26L3dXl5&9A|oY~w2 zHAdFcAxp)C0WqoV>DITKG}bp4m_VuOfrAVyG6`4@yPV$r+W+~pfU&^=hOhOPLb=Cl_%Jdv zQkG=`_-~CQiGdur+#{_EarEF+HoBw&U-**w`_|yui?SDzkTj$nvVqHSD%%n5O3^!c z5GGfH*!G7|3OI20WCF>_Kf>v$AiK!WqMelbmh$)jeh&QjPf&43U+V#+Emu%(KLaVB0i>%`|sB zoS)Qmf_TJ3MkOCrra=qK5qUHV)_Mt@>Zlvj%n3=E-&2q7sIUDzFd{MXFv>jSB!_*d z)@hO4DgD3uNbC^4@=Rc?hm(7F7V13!Z%n%fZ5V&Snj*5_`p?mf_1)f#^|>3^+_r;M z0~_l?6X_D~u+ZK>ohTWjx-*=dtH|h52SK6Z2F9fjfmm7UV8x0VE6#G=F+2J;QNltm zW+M#@FntX*ghgIm*-V=ui?vKBoQ?7UVG#I%e-W4udk2XC@VASr zz}9s7`Gfm`dwo)zX(HGRbTKS_OrF$r`^7B=V{F+yJfr;o;O(EnBVW67--Zwr$()7@eeJv%`vQ+qV7Iyyv_ZzV)nc<9&|f-Kotw>R(sY7~>k_{GEfT7B|FT zQ3j;4D2CZSv=3C#2%-}+l6D&)1ktR8*{U^ALH@Vb1RtH_QfzjRX&f((AP&QOEUgs4 zflM~Jr@%q=+^m}4@JriCrv zP+In!Fc5yQJF4@hUXg+3kWotTfNODe96}FA~ zcLhhtp+WXEo&(}$MslZEaP=sM;w4t`bs?DSAqA$Tj+vl}$T#S_aPil6PSz0X<}!wN zQ$->@br_H`2K?4TnmdWg#cqB59&KsNijud09KSl3J4^sK0=n5mMsaD3ri~~LPQ~lw z_rbVVfJm9x@X61XI{I<+*b#62a|3M!^laWRy!%2=Oe!@Dp_Oi*H*79!D^;m@w>{&K zOJ#C4!3k!DUgS<}5;Or(M^81jPgA-x+vYO%#9rUITl+?npngh}`fi$5(Rxl^#OMhytI7=OjTM*mg6amZlaeEtlZg3%)@H@u}HL(G`!a=2eVZeh9A z(SF+WL|3*v={?jH+BvM=+Vd~5-)p6AX}YGNB`q7+*A-s5)Z5ybLqe%_7L4o{_`>=Qk$SZ=WY_;PzjJa^}$LJs+1nzH3(J}!LS9lpPx(@smJAqe45Cv|eB^1<5Qu^>G8Lc#>66e|PDLkuzUiFL14&C}Uw?RCUVtgBoDk zJ}6LsP2@c$FbUX4T536FwYO1fXaP^)fPz@{>)&4-*c}^Ha(MRBBYDew4qtbMjr^S* z{`?wQDo+M9WT9XPOA#ME*ajTsb3HD{g&Q4CCR&bup^yB`3MA|G6VeTl7>M@ZZh~P8JIx^c9lB z8aI&*KSGs=&%`pLqAjpRqbpy?oB+QQtkj_YY-Al1^Fnp1e?XYt7;7@Xtfwqt4wOY| zI|~1ff?`TMM?@DBPff=2`BA-X%2;E?@e5yOdacI+iBk{K(1>9~sP-P6PGAK-|D2ca z_p@U|b!Q&}0;~>ruU2qV1aF!8sWgZJ>zsk*I*-Wu!~OtG8?aG}9M*jfyDfwJHR}fV zfg~SpI2=8n*gf(l{M*#4lf__&1ipq>OyU~}Ogt7LCrj#`*gfnnt)C6^R_46*oOJsD zwetf76I$7dDaOlDSd$*sw}6nU+D{cR$|f^_Gtyknv8w%jhaWoT z#jA#d`wS93z{n%l)R9Yo6L!MY+NzE<4>cA{6p;<$?6rwti&wegx--ZmftNCK9B4tq zf(GDKe674V&(TX98kSnAZV}BhMdMv)Swa;Qws!z*P@}gkVBrdifu@m|e=PG}onu17Z3kx{q_NtMF{B%Rcw`L%=ys+HUi3{X;vT=SsF>!Bj_IG@hYw2{yNOb$wdvjf~y`??g z!6V9&XeuLaolNBY3iUImk$Ovbu0zoUymL1k)mSO#CH<3Oy4^Xf=eWyEzJL&MS?$@rjx3 zVtuLwU35)VJDUwhZLuF74s0k%`2O&Aen&jbV~{ z)8FAbrStOklm*bz1+DgyT2iv?Ceum4it4sQoVC3O`&=PMO5NnQV8dAq=G3&fhU>st zgcd<+xTxY!5L9a6FMI_9-EKyg#pOxfErjg4#D{dhcA4o)^HPsmgrVNpWhY6_Ja ze6Y8&iP=dy%OGclwK4h#Om1eDY<+nLy->m5XqqZF#~V{+tp< zPv!C#tcU!us55<4P6X7Kf}pBspWiflYkZ?Z3UQq7=>cKUpwFS#2QjI%V8a#Q;7FYu z89`Mdta^HK-+ieO(vc?F+Z0X19ZlOKzxq+_ve(RMJ7#Ccnj)tZNd^(BEa0mx8~s>w_gr@TLp7i6fYg3vem-L||%W7DXM*SKz$(Jk%p>h*NklyOBFK zNM3_xyKNwFcFg&d9J!yD#}$l3v^3_-aCwcBYr|)D>d{|d@P@eU&F`G=-nnq~y!l{c zA@gh`Csm8SaP|@ITE#s>>Cyl5wTO!W-=79=QOE( zASES}+xmtr@Tg3sr>$Pgr+ix$Uhh4zpDbyj>~gF!wRaVHOZj|uo6uec_?R;Lb#2)Z zswSR$SU(wjJ2LWGhH2T1(Ad8~5n4GqeCw^SkX;$gz?(5C=#xCj=a@JdBeC1qOs6|o zPA01ETNLqJbjZ$p=48%S-I}R_@mua@yPiX(4Y53rEryZLEpSr6?Y-(Ib&a^M3}B}a zu45IHA&qtuKjah4aNA+9sO}vjMB%-`Y^!}_oXw3ai9XGy0yPbC(e?aTb4Eul-viPtHr8<9Hh zX2OtYE;d}zlJl8q$k2-wt7NdlNtA@97mNu)xb&}hHv*_G*MYELAT}Pf_zR_`u_oxW zh1tH$z%fG04?G&$Sd?Pu*@8haX&E-XG4wLs^|x|Fk9zlZ$hCcQc_|`LgUtyyAEpl8 zQGDBAe8iIB@@Y+qDjW+Ihnn0mzb3h-OhNQPkAvYFnWdM=)~-`=k+{X#2Epq3S}8&a zt;PBDi&j`9yFO-(^#(*$C7v=(VVP8QU@Pqzk87CLAhEityQ}KKF#_CAZaPq2K&2H^ zA1BIs!itTkO|6RsV4=uMeCf~T^2pFS==R+b+SSoK0mFEQf$Qkbehu_V-_5Aj7$eSD zX3ZqQn}IJ>`AEO5XrH(q8M`c;&k=+xynxCvPX(xz9hdV3Nb|(_1&!VCI#3@QA13(( zqe{T%pnyWfk=jwA&%paEDI=&M8qFk&c-lRH0n5QXMqnN7lmyir&@tsW5Ffr5k||%7 z)?M((Z){16RW3@zF1 zZJ0|8L<+iT%$osqqkoJaeFnSK`Lgp_L8-oAqU%qdyZEPukov3GfwGo6@g%IE<2^}e z5*22oK+!zzyg1RF(?S#+0I1gPxEl8vWe4cwjgWtk=ck)QysSvQZAvE5sKH`kW@*J# zy`$}lRLjkzu5r$fu=aIyaQ;K1jI*zeRF{2bYRl63YRTynj}H$_teCvVR5GPEw)7

    v8@I|6#+CF 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

    oM6YeIT82|m(Rb$v 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 d-dnzdyXv=e>(6;e>i Date: Fri, 9 May 2025 10:29:14 +0530 Subject: [PATCH 24/26] update the md file --- blazor/datagrid/pdf-export-options.md | 180 ++++++++++++++++++++++---- 1 file changed, 153 insertions(+), 27 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index 1f111d566c..c97ace2bbd 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1100,7 +1100,7 @@ The following example demonstrates how to customize the Grid columns when export List ExportColumns = new List(); ExportColumns.Add(new GridColumn() { Field = "OrderID", HeaderText = "Order Number", Width = "120" }); ExportColumns.Add(new GridColumn() { Field = "CustomerID", HeaderText = "Customer Name", Width = "120" }); - ExportColumns.Add(new GridColumn() { Field = "Freight", HeaderText = "Freight", Width = "120", Format = "C2", TextAlign = Syncfusion.Blazor.Grids.TextAlign.Center }); + ExportColumns.Add(new GridColumn() { Field = "Freight", HeaderText = "Freight", Width = "120", Format = "C2", TextAlign = TextAlign.Center }); var exportProperties = new PdfExportProperties { @@ -1166,6 +1166,93 @@ public class OrderData {% previewsample "https://blazorplayground.syncfusion.com/embed/VXLeNzWspWvjNiOp?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} +### Customize column width in exported PDF document + +The PDF export feature allows customization of the columns being exported by using the [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). While defining the columns, you can adjust their widths as needed. + +In the following code sample, we have customized the column widths for the exported PDF document by enabling the[DisableAutoFitWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DisableAutoFitWidth) property of the `PdfExportProperties`. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + +@using Syncfusion.Blazor.Buttons +@using Syncfusion.Blazor.Grids + + + + + + + + + + +@code{ + private SfGrid DefaultGrid; + public List Orders { get; set; } + + protected override void OnInitialized() + { + Orders = OrderData.GetAllRecords(); + } + public async Task PdfExport() + { + PdfExportProperties ExportProperties = new PdfExportProperties(); + ExportProperties.DisableAutoFitWidth = true; + ExportProperties.Columns = new List() + { + new GridColumn(){ Field="OrderID", HeaderText="Order ID", TextAlign=TextAlign.Left, Width="300"}, + new GridColumn(){ Field="CustomerID", HeaderText="Customer Name", TextAlign=TextAlign.Left, Width="100"}, + new GridColumn(){ Field="OrderDate", HeaderText=" Order Date", Type=ColumnType.Date, Format="d", TextAlign=TextAlign.Left, Width="80"} + }; + await this.DefaultGrid.ExportToPdfAsync(ExportProperties); + } +} + +{% endhighlight %} + +{% highlight c# tabtitle="OrderData.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + + public OrderData() { } + + public OrderData(int OrderID, string CustomerID, DateTime? OrderDate) + { + this.OrderID = OrderID; + this.CustomerID = CustomerID; + this.OrderDate = OrderDate; + } + + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData { OrderID = 10248, CustomerID = "VINET", OrderDate = new DateTime(1996, 7, 4) }); + Orders.Add(new OrderData { OrderID = 10249, CustomerID = "TOMSP", OrderDate = new DateTime(1996, 7, 5) }); + Orders.Add(new OrderData { OrderID = 10250, CustomerID = "HANAR", OrderDate = new DateTime(1996, 7, 6) }); + Orders.Add(new OrderData { OrderID = 10251, CustomerID = "VINET", OrderDate = new DateTime(1996, 7, 7) }); + Orders.Add(new OrderData { OrderID = 10252, CustomerID = "SUPRD", OrderDate = new DateTime(1996, 7, 8) }); + Orders.Add(new OrderData { OrderID = 10253, CustomerID = "HANAR", OrderDate = new DateTime(1996, 7, 9) }); + Orders.Add(new OrderData { OrderID = 10254, CustomerID = "CHOPS", OrderDate = new DateTime(1996, 7, 10) }); + Orders.Add(new OrderData { OrderID = 10255, CustomerID = "VINET", OrderDate = new DateTime(1996, 7, 11) }); + Orders.Add(new OrderData { OrderID = 10256, CustomerID = "HANAR", OrderDate = new DateTime(1996, 7, 12) }); + } + return Orders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public DateTime? OrderDate { get; set; } +} + +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/BtVetyXEWnovmFoM?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + ## Font and color customization The Syncfusion Blazor DataGrid provides the ability to customize the font in the exported PDF document. This feature allows you to control the appearance and styling of the text in the exported file, ensuring consistency with your application's design. @@ -1453,7 +1540,9 @@ To rotate a column header text in a PDF document, follow these steps: In the following demo, the [DrawString](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.Graphics.PdfGraphics.html#Syncfusion_Pdf_Graphics_PdfGraphics_DrawString_System_String_Syncfusion_Pdf_Graphics_PdfFont_Syncfusion_Pdf_Graphics_PdfBrush_System_Drawing_PointF_) method from the [Graphics](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.Graphics.PdfGraphics.html) is used to rotate the header text of the column header inside the `BeginCellLayout` event handler. -```cshtml +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} + @using Syncfusion.Blazor.Grids @using Syncfusion.Pdf.Graphics @using Syncfusion.PdfExport @@ -1461,19 +1550,19 @@ In the following demo, the [DrawString](https://help.syncfusion.com/cr/document- @using Syncfusion.Pdf - + - - - - + + + + -@code{ - public SfGrid DefaultGrid; - public List Orders { get; set; } +@code { + public SfGrid DefaultGrid; + public List Orders { get; set; } List headerValues = new List(); public async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args) @@ -1528,24 +1617,9 @@ In the following demo, the [DrawString](https://help.syncfusion.com/cr/document- protected override void OnInitialized() { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - }).ToList(); - } - - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } + Orders = OrderData.GetAllRecords(); } } - -``` + +{% endhighlight %} + +{% highlight c# tabtitle="OrderDetails.cs" %} + +public class OrderData +{ + public static List Orders = new List(); + + public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName, string shipCountry) + { + this.OrderID = orderID; + this.CustomerID = customerID; + this.Freight = freight; + this.ShipCity = shipCity; + this.ShipName = shipName; + this.ShipCountry = shipCountry; + } + + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier", "France")); + Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten", "Germany")); + Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes", "Brazil")); + Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock", "France")); + Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices", "Belgium")); + Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes", "Brazil")); + Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese", "Switzerland")); + Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt", "Switzerland")); + Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export", "Brazil")); + Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos", "Venezuela")); + Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel", "Austria")); + Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial", "Mexico")); + Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen", "Germany")); + Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia", "Brazil")); + Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery", "USA")); + } + + return Orders; + } + + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double Freight { get; set; } + public string ShipCity { get; set; } + public string ShipName { get; set; } + public string ShipCountry { get; set; } +} + +{% endhighlight %} +{% endtabs %} ![PDF Exported Grid Cell Customization in Blazor DataGrid](./images/blazor-datagrid-pdf-exported-grid-cell-customization.png) From 67362f2343c90b74a3460a04a7709b9f6f82c0d0 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 9 May 2025 13:13:36 +0530 Subject: [PATCH 25/26] Attached the github sample link --- blazor/datagrid/pdf-export-options.md | 173 +++++++++++++------------- 1 file changed, 84 insertions(+), 89 deletions(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index c97ace2bbd..fbd00e6274 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1055,6 +1055,8 @@ In the following example, the [Blazor Toggle Switch Button](https://blazor.syncf ![Enabling horizontal overflow](./images/Enabling-horizontal-overflow.gif) +> You can find a complete sample on [GitHub](https://github.com/SyncfusionExamples/exporting-blazor-datagrid/tree/master/Exporting-PDF-Datagrid/Horizontal_overflow). + ## Customizing columns on export The Syncfusion Blazor DataGrid allows you to customize the appearance of Grid columns in your exported PDF documents. This feature empowers you to tailor specific column attributes such as field, header text, and text alignment, ensuring that your exported PDFs align perfectly with your design and reporting requirements. @@ -1170,7 +1172,7 @@ public class OrderData The PDF export feature allows customization of the columns being exported by using the [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). While defining the columns, you can adjust their widths as needed. -In the following code sample, we have customized the column widths for the exported PDF document by enabling the[DisableAutoFitWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DisableAutoFitWidth) property of the `PdfExportProperties`. +The following example demonstrates how to customize the column widths of the exported PDF document by enabling the[DisableAutoFitWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DisableAutoFitWidth) property of the `PdfExportProperties`. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1686,6 +1688,8 @@ public class OrderData ![PDF Exported Grid Cell Customization in Blazor DataGrid](./images/blazor-datagrid-pdf-exported-grid-cell-customization.png) +> You can find a complete sample on [GitHub](https://github.com/SyncfusionExamples/exporting-blazor-datagrid/tree/master/Exporting-PDF-Datagrid/Rotate_header). + ## Exporting Grid data as stream The Syncfusion Blazor DataGrid allows exporting Grid data as a memory stream, enabling programmatic handling before saving or processing. The following sections cover how to export Grid data as a memory stream, merge multiple memory streams into one, and convert the memory stream to a file stream for saving the exported file. @@ -1700,7 +1704,7 @@ The provided example showcases the process of exporting the file as a memory str **Step 1**: **Add JavaScript for file download** -Create a JavaScript file named **saveAsFile.js** under the **wwwroot/scripts** directory and include the following function to trigger browser download: +Create a JavaScript file named **saveAsFile.js** under the **wwwroot** directory and include the following function to trigger browser download: {% tabs %} {% highlight razor tabtitle="saveAsFile.js" %} @@ -1755,15 +1759,15 @@ In the **Index.razor** file, the Grid is set up, the export operation is trigger {% tabs %} {% highlight razor tabtitle="Index.razor" %} -@using Syncfusion.Blazor.Grids +@using Syncfusion.Blazor.Grids; +@using Syncfusion.Blazor.Navigations; @using System.IO; @using Syncfusion.Pdf -@using Syncfusion.XlsIO @using Syncfusion.PdfExport; @inject IJSRuntime JSRuntime - - + + @@ -1786,7 +1790,7 @@ In the **Index.razor** file, the Grid is set up, the export operation is trigger { if (args.Item.Id == "Grid_pdfexport") //Id is combination of Grid's ID and itemname. { - MemoryStream streamDoc = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true); + MemoryStream streamDoc = await Grid.ExportToPdfAsync(asMemoryStream: true); await JSRuntime.InvokeVoidAsync("saveAsFile", new object[] {"PdfMemoryStream.pdf", Convert.ToBase64String(streamDoc.ToArray()), true }); } } @@ -1841,6 +1845,8 @@ public class OrderData {% endhighlight %} {% endtabs %} +> You can find a complete sample on [GitHub](https://github.com/SyncfusionExamples/exporting-blazor-datagrid/tree/master/Exporting-PDF-Datagrid/Blazor_Memory_Stream). + ### Converting memory stream to file stream for PDF export The PDF Export feature in Syncfusion Blazor DataGrid allows you to converting a memory stream obtained from the [ExportToPdfAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ExportToPdfAsync_Syncfusion_Blazor_Grids_PdfExportProperties_) method into a file stream to export PDF document. @@ -1858,23 +1864,22 @@ The example below demonstrates how to achieve this by converting the memory stre @using Syncfusion.Blazor.Grids @using System.IO; -@using Syncfusion.XlsIO +@using Syncfusion.Pdf @using Syncfusion.PdfExport; @inject IJSRuntime JSRuntime - + - - - - - + + + + @code { - private SfGrid Grid; + private SfGrid DefaultGrid; public List Orders { get; set; } protected override void OnInitialized() @@ -1909,52 +1914,46 @@ The example below demonstrates how to achieve this by converting the memory stre {% highlight c# tabtitle="OrderData.cs" %} -public class OrderData -{ - public static List Orders = new List(); - - public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) - { - this.OrderID = orderID; - this.CustomerID = customerID; - this.Freight = freight; - this.ShipCity = shipCity; - this.ShipName = shipName; - } + public class OrderData + { + public static List Orders = new List(); + public OrderData() { } + public OrderData(int OrderID, string CustomerID, double Freight, DateTime? OrderDate) + { + this.OrderID = OrderID; + this.CustomerID = CustomerID; + this.Freight = Freight; + this.OrderDate = OrderDate; + } - public static List GetAllRecords() - { - if (Orders.Count == 0) - { - Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); - Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); - Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); - Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); - Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); - Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); - Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); - Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); - Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); - Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); - Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); - Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); - Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); - Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); - Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); - } - return Orders; - } + public static List GetAllRecords() + { + if (Orders.Count == 0) + { + Orders.Add(new OrderData { OrderID = 10248, CustomerID = "VINET", Freight = 32.38, OrderDate = new DateTime(1996, 7, 4) }); + Orders.Add(new OrderData { OrderID = 10249, CustomerID = "TOMSP", Freight = 11.61, OrderDate = new DateTime(1996, 7, 5) }); + Orders.Add(new OrderData { OrderID = 10250, CustomerID = "HANAR", Freight = 65.83, OrderDate = new DateTime(1996, 7, 6) }); + Orders.Add(new OrderData { OrderID = 10251, CustomerID = "VINET", Freight = 41.34, OrderDate = new DateTime(1996, 7, 7) }); + Orders.Add(new OrderData { OrderID = 10252, CustomerID = "SUPRD", Freight = 151.30, OrderDate = new DateTime(1996, 7, 8) }); + Orders.Add(new OrderData { OrderID = 10253, CustomerID = "HANAR", Freight = 58.17, OrderDate = new DateTime(1996, 7, 9) }); + Orders.Add(new OrderData { OrderID = 10254, CustomerID = "CHOPS", Freight = 22.98, OrderDate = new DateTime(1996, 7, 10) }); + Orders.Add(new OrderData { OrderID = 10255, CustomerID = "VINET", Freight = 148.33, OrderDate = new DateTime(1996, 7, 11) }); + Orders.Add(new OrderData { OrderID = 10256, CustomerID = "HANAR", Freight = 13.97, OrderDate = new DateTime(1996, 7, 12) }); + } + return Orders; + } - public int OrderID { get; set; } - public string CustomerID { get; set; } - public double Freight { get; set; } - public string ShipCity { get; set; } - public string ShipName { get; set; } -} + public int OrderID { get; set; } + public string CustomerID { get; set; } + public double? Freight { get; set; } + public DateTime? OrderDate { get; set; } + } {% endhighlight %} {% endtabs %} +> You can find a complete sample on [GitHub](https://github.com/SyncfusionExamples/exporting-blazor-datagrid/tree/master/Exporting-PDF-Datagrid/PDF_Converting_Memory_Stream). + ### Merging two PDF memory streams When merging two PDF memory stream files and exporting the resulting merged file as a PDF document. To accomplish this, you can use the PDF documents [Merge](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.PdfDocumentBase.html?#Syncfusion_Pdf_PdfDocumentBase_Merge_Syncfusion_Pdf_PdfDocumentBase_Syncfusion_Pdf_Parsing_PdfLoadedDocument_) method available in the [PdfDocumentBase](https://help.syncfusion.com/cr/document-processing/Syncfusion.Pdf.PdfDocumentBase.html) class, class. To achieve this functionality, you can utilize the [Syncfusion.Blazor.Pdf](https://www.nuget.org/packages/Syncfusion.Pdf.Net.Core) package. @@ -1968,23 +1967,22 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st @using Syncfusion.Blazor.Grids @using System.IO; +@using Syncfusion.Pdf; @using Syncfusion.PdfExport; -@using Syncfusion.Pdf @inject IJSRuntime JSRuntime - + - - - - - + + + + @code { - private SfGrid Grid; + private SfGrid DefaultGrid; public List Orders { get; set; } protected override void OnInitialized() @@ -2032,6 +2030,7 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st ExportProperties.Theme = Theme; MemoryStream streamDoc2 = await DefaultGrid.ExportToPdfAsync(asMemoryStream: true, ExportProperties); + // Create a copy of streamDoc2 to access the memory stream. MemoryStream copyOfStreamDoc2 = new MemoryStream(streamDoc2.ToArray()); @@ -2046,7 +2045,7 @@ In this example, there are two memory streams: *streamDoc1* and *streamDoc2*. st {% endhighlight %} -{% highlight js tabtitle="wwwroot/scripts/saveAsFile.js" %} +{% highlight js tabtitle="wwwroot/saveAsFile.js" %} function saveAsFile(filename, bytesBase64) { var link = document.createElement('a'); @@ -2065,44 +2064,40 @@ public class OrderData { public static List Orders = new List(); - public OrderData(int orderID, string customerID, double freight, string shipCity, string shipName) + public OrderData() { } + + public OrderData(int OrderID, string CustomerID, double Freight, DateTime? OrderDate) { - this.OrderID = orderID; - this.CustomerID = customerID; - this.Freight = freight; - this.ShipCity = shipCity; - this.ShipName = shipName; + this.OrderID = OrderID; + this.CustomerID = CustomerID; + this.Freight = Freight; + this.OrderDate = OrderDate; } public static List GetAllRecords() { if (Orders.Count == 0) { - Orders.Add(new OrderData(10248, "VINET", 32.38, "Reims", "Vins et alcools Chevalier")); - Orders.Add(new OrderData(10249, "TOMSP", 11.61, "Münster", "Toms Spezialitäten")); - Orders.Add(new OrderData(10250, "HANAR", 65.83, "Rio de Janeiro", "Hanari Carnes")); - Orders.Add(new OrderData(10251, "VICTE", 41.34, "Lyon", "Victuailles en stock")); - Orders.Add(new OrderData(10252, "SUPRD", 51.3, "Charleroi", "Suprêmes délices")); - Orders.Add(new OrderData(10253, "HANAR", 58.17, "Rio de Janeiro", "Hanari Carnes")); - Orders.Add(new OrderData(10254, "CHOPS", 22.98, "Bern", "Chop-suey Chinese")); - Orders.Add(new OrderData(10255, "RICSU", 148.33, "Genève", "Richter Supermarkt")); - Orders.Add(new OrderData(10256, "WELLI", 13.97, "Resende", "Wellington Import Export")); - Orders.Add(new OrderData(10257, "HILAA", 81.91, "San Cristóbal", "Hila Alimentos")); - Orders.Add(new OrderData(10258, "ERNSH", 140.51, "Graz", "Ernst Handel")); - Orders.Add(new OrderData(10259, "CENTC", 3.25, "México D.F.", "Centro comercial")); - Orders.Add(new OrderData(10260, "OTTIK", 55.09, "Köln", "Ottilies Käseladen")); - Orders.Add(new OrderData(10261, "QUEDE", 3.05, "Rio de Janeiro", "Que delícia")); - Orders.Add(new OrderData(10262, "RATTC", 48.29, "Albuquerque", "Rattlesnake Canyon Grocery")); + Orders.Add(new OrderData { OrderID = 10248, CustomerID = "VINET", Freight = 32.38, OrderDate = new DateTime(1996, 7, 4) }); + Orders.Add(new OrderData { OrderID = 10249, CustomerID = "TOMSP", Freight = 11.61, OrderDate = new DateTime(1996, 7, 5) }); + Orders.Add(new OrderData { OrderID = 10250, CustomerID = "HANAR", Freight = 65.83, OrderDate = new DateTime(1996, 7, 6) }); + Orders.Add(new OrderData { OrderID = 10251, CustomerID = "VINET", Freight = 41.34, OrderDate = new DateTime(1996, 7, 7) }); + Orders.Add(new OrderData { OrderID = 10252, CustomerID = "SUPRD", Freight = 151.30, OrderDate = new DateTime(1996, 7, 8) }); + Orders.Add(new OrderData { OrderID = 10253, CustomerID = "HANAR", Freight = 58.17, OrderDate = new DateTime(1996, 7, 9) }); + Orders.Add(new OrderData { OrderID = 10254, CustomerID = "CHOPS", Freight = 22.98, OrderDate = new DateTime(1996, 7, 10) }); + Orders.Add(new OrderData { OrderID = 10255, CustomerID = "VINET", Freight = 148.33, OrderDate = new DateTime(1996, 7, 11) }); + Orders.Add(new OrderData { OrderID = 10256, CustomerID = "HANAR", Freight = 13.97, OrderDate = new DateTime(1996, 7, 12) }); } return Orders; } public int OrderID { get; set; } public string CustomerID { get; set; } - public double Freight { get; set; } - public string ShipCity { get; set; } - public string ShipName { get; set; } + public double? Freight { get; set; } + public DateTime? OrderDate { get; set; } } {% endhighlight %} -{% endtabs %} \ No newline at end of file +{% endtabs %} + +> You can find a complete sample on [GitHub](https://github.com/SyncfusionExamples/exporting-blazor-datagrid/tree/master/Exporting-PDF-Datagrid/Merging_Two_PDF_Memory_Stream). \ No newline at end of file From c0aea25cfc35543eda26e248e361a652db1adf35 Mon Sep 17 00:00:00 2001 From: Gayathri4135 Date: Fri, 9 May 2025 17:24:46 +0530 Subject: [PATCH 26/26] Updated the md file --- blazor/datagrid/pdf-export-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/datagrid/pdf-export-options.md b/blazor/datagrid/pdf-export-options.md index fbd00e6274..89e17daa9b 100644 --- a/blazor/datagrid/pdf-export-options.md +++ b/blazor/datagrid/pdf-export-options.md @@ -1170,7 +1170,7 @@ public class OrderData ### Customize column width in exported PDF document -The PDF export feature allows customization of the columns being exported by using the [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html). While defining the columns, you can adjust their widths as needed. +The PDF export provides an option to customize the column being exported to a PDF format using the [Columns](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_Columns) property of the [PdfExportProperties](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html) class. While defining the column, we can change its width as per the requirement. The following example demonstrates how to customize the column widths of the exported PDF document by enabling the[DisableAutoFitWidth](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.PdfExportProperties.html#Syncfusion_Blazor_Grids_PdfExportProperties_DisableAutoFitWidth) property of the `PdfExportProperties`.