Export to PDF - two tables, single pdf page

Hello, 

is there a way to export two grids to the same page similarly to excel export? 

The documentation only shows an example where each grid is exported to separate list: https://ej2.syncfusion.com/aspnetmvc/documentation/grid/pdf-export/#multiple-exporting

multipleExport: { type: 'AppendToSheet', blankRows: 2 },

seems to be ignored in export properties.


Thank you, 

Petr


5 Replies 1 reply marked as answer

RR Rajapandi Ravi Syncfusion Team November 3, 2021 01:46 PM UTC

Hi Petr, 

Greetings from Syncfusion support. 

Based on the query we could see that your requirement is to render multiple Grids rendered in a single pdf document(using multiple export) in a sequence instead of in new pages. By default in our EJ2 Grid, multiple exporting each Grid will be rendered in a new page of the same document. This is its default behavior based on the Grid’s current architecture.  

Please get back to us if you require any further assistance. 

Regards, 
Rajapandi R


PE Petr November 8, 2021 05:13 PM UTC

Dear Ravi, 

It is pretty obvious that this is the default behavior (I've provided a link to documentation), but that was not my question.

Do we have a simple way to modify it as we do have in excel export? 

Best regards,

Petr



RR Rajapandi Ravi Syncfusion Team November 9, 2021 10:44 AM UTC

Hi Petr, 

Thanks for the update 

Based on your query, we have prepared a sample to achieve exporting multiple Grids to rendered in a single pdf document in a sequence instead of in new pages. Please refer the below sample and code example for more information, 

<div>Grid1</div> 
@Html.EJS().Grid("Grid1").DataSource((IEnumerable<object>)ViewBag.DataSource).AllowPdfExport().ToolbarClick("toolbarClick").Columns(col => 
{ 
    col.Field("OrderID").HeaderText("Order ID").IsPrimaryKey(true).Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
    col.Field("CustomerID").HeaderText("Customer ID").Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
    col.Field("EmployeeID").HeaderText("Employee ID").Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
    col.Field("Freight").HeaderText("Freight").Format("C2").Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
}).Toolbar(new List<string>() { "PdfExport" }).Render() 
 
<div>Grid2</div> 
@Html.EJS().Grid("Grid2").DataSource((IEnumerable<object>)ViewBag.DataSource1).AllowPdfExport().Columns(col => 
    { 
        col.Field("UnitID").HeaderText("Unit ID").IsPrimaryKey(true).Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
        col.Field("EmployeeID").HeaderText("Employee ID").Width("120").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Right).Add(); 
        col.Field("DnName").HeaderText("Name").Width("125").Add(); 
        col.Field("ShipAddress").HeaderText("Address").Width("170").Add(); 
    }).Render() 
 
 
 
<script> 
    function toolbarClick(args) { 
        if (args.item.text == "PDF Export") { 
            customPDF() 
        } 
    } 
    function customPDF() { 
        // create a new PDF document 
        let pdfDocument = new ej.pdfexport.PdfDocument(); 
        // add a page 
        let page = pdfDocument.pages.add(); 
        // set the font 
        let font = new ej.pdfexport.PdfStandardFont(2, 10); 
        // create black brush 
        let brush = new ej.pdfexport.PdfSolidBrush(new ej.pdfexport.PdfColor(0, 0, 0)); 
 
        var totalGrid = document.getElementsByClassName('e-grid'); 
        for (var g = 0; g < totalGrid.length; g++) { 
            var gridI = totalGrid[g].ej2_instances[0]; 
            // create a PdfGrid 
            let pdfGrid = new ej.pdfexport.PdfGrid(); 
            // add columns 
            var columns = gridI.getColumns(); 
            pdfGrid.columns.add(columns.length); 
 
            // add headers 
            var headers = gridI.columns; 
            var secondLevelHeader = []; 
            var firstLevelHeader = []; 
            for (var s = 0; s < headers.length; s++) { 
                firstLevelHeader.push(headers[s].headerText) 
                if (headers[s].columns) { 
                    var stackedHeader = true; // enable the stackedHeader flag variable if the grid have stacked header. 
                    for (var k = 0; k < headers[s].columns.length; k++) { 
                        secondLevelHeader.push(headers[s].columns[k].headerText) 
                    } 
                } 
            } 
            if (stackedHeader) { 
                pdfGrid.headers.add(2); 
            } else { 
                pdfGrid.headers.add(1); 
            } 
            var secondLevelHeaderOrder = []; 
            for (var h = 0; h < pdfGrid.headers.rows.length; h++) { 
                if (h == 0) { 
                    let pdfGridHeader1 = pdfGrid.headers.getHeader(h); 
                    var firstLevelHeaderOrder = 0; 
                    for (var n = 0; n < firstLevelHeader.length; n++) { 
                        if (headers[n].columns) { 
                            var columnSpanLength = headers[n].columns.length; 
                            let secondLevelHeaderOrderIndex = firstLevelHeaderOrder; 
                            for (var t = 0; t < columnSpanLength; t++) { 
                                secondLevelHeaderOrder.push(secondLevelHeaderOrderIndex + t); 
                            } 
                            pdfGridHeader1.cells.getCell(firstLevelHeaderOrder).value = firstLevelHeader[n]; 
                            //Apply column span for first level stacked header 
                            pdfGridHeader1.cells.getCell(firstLevelHeaderOrder).columnSpan = columnSpanLength; 
                            firstLevelHeaderOrder = firstLevelHeaderOrder + columnSpanLength 
                        } else if (stackedHeader) { 
                            pdfGridHeader1.cells.getCell(firstLevelHeaderOrder).value = firstLevelHeader[n]; 
                            //Apply row span for first level normal header if grid have stacked header 
                            pdfGridHeader1.cells.getCell(firstLevelHeaderOrder).rowSpan = 2; 
                            firstLevelHeaderOrder = firstLevelHeaderOrder + 1 
                        } else { 
                            pdfGridHeader1.cells.getCell(n).value = firstLevelHeader[n]; 
                        } 
 
                    } 
 
                } else { 
                    let pdfGridHeader2 = pdfGrid.headers.getHeader(h); 
                    for (var st = 0; st < secondLevelHeader.length; st++) { 
                        pdfGridHeader2.cells.getCell(secondLevelHeaderOrder[st]).value = secondLevelHeader[st]; 
                    } 
                } 
            } 
            stackedHeader = false 
            // add rows 
            var data = gridI.dataSource; 
            for (let i = 0; i < data.length; i++) { 
                let pdfGridRow = pdfGrid.rows.addRow(); 
                for (let j = 0; j < columns.length; j++) { 
                    var field = columns[j].field; 
                    if (field) { 
                        pdfGridRow.cells.getCell(j).value = data[i][field].toString(); 
                    } 
 
                } 
            } 
            if (g == 0) { 
                // drawing a grid 
                var gridResult = pdfGrid.draw( 
                    page, 
                    new ej.pdfexport.PointF(0, 0) 
                ); 
            } else { 
                let layoutFormat = new ej.pdfexport.PdfGridLayoutFormat(); 
                layoutFormat.layout = 0; //PdfLayoutType.Paginate; 
                layoutFormat.break = 0; //PdfLayoutBreakType.FitPage; 
                // drawing a grid based on PdfGridLayoutResult value 
                gridResult = pdfGrid.draw( 
                    gridResult.page, 
                    new ej.pdfexport.PointF(0, gridResult.bounds.y + gridResult.bounds.height + 30), 
                    layoutFormat 
                ); 
            } 
        } 
        //Save the document. 
        pdfDocument.save('MultipleGrid_Result.pdf'); 
        pdfDocument.destroy(); 
    } 
 
</script> 


Screenshot: 

 

Regards, 
Rajapandi R 


Marked as answer

PE Petr November 24, 2021 03:29 PM UTC

Thank you very much for your help!



RR Rajapandi Ravi Syncfusion Team November 25, 2021 03:30 AM UTC

Hi Petr, 

Thanks for the update. 

We are happy to hear that the provided solution works fine at our end. 

Please get back to us if you need further assistance. 

Rajapandi R 



Loader.
Up arrow icon