devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
133 lines (130 loc) • 6.03 kB
JavaScript
/**
* DevExtreme (esm/exporter/jspdf/export_data_grid_2.js)
* Version: 21.1.4
* Build date: Mon Jun 21 2021
*
* Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
isDefined
} from "../../core/utils/type";
import {
extend
} from "../../core/utils/extend";
import {
PdfGrid
} from "./pdf_grid";
function _getFullOptions(options) {
var fullOptions = extend({}, options);
if (!isDefined(fullOptions.topLeft)) {
throw "options.topLeft is required"
}
if (!isDefined(fullOptions.indent)) {
fullOptions.indent = 10
}
return fullOptions
}
function exportDataGrid(doc, dataGrid, options) {
options = extend({}, _getFullOptions(options));
var dataProvider = dataGrid.getDataProvider();
return new Promise(resolve => {
dataProvider.ready().done(() => {
var columns = dataProvider.getColumns();
var pdfGrid = new PdfGrid(options.splitToTablesByColumns, options.columnWidths);
var rowsIndents = [];
pdfGrid.startNewTable(options.drawTableBorder, options.topLeft);
var dataRowsCount = dataProvider.getRowsCount();
for (var rowIndex = 0; rowIndex < dataRowsCount; rowIndex++) {
var rowType = dataProvider.getCellData(rowIndex, 0, true).cellSourceData.rowType;
var groupLevel = "header" !== rowType ? dataProvider.getGroupLevel(rowIndex) : 0;
var currentRow = [];
for (var cellIndex = 0; cellIndex < columns.length; cellIndex++) {
var cellData = dataProvider.getCellData(rowIndex, cellIndex, true);
var pdfCell = {
text: cellData.value
};
if ("header" === rowType) {
var cellMerging = dataProvider.getCellMerging(rowIndex, cellIndex);
if (cellMerging && cellMerging.rowspan > 0) {
pdfCell.rowSpan = cellMerging.rowspan
}
if (cellMerging && cellMerging.colspan > 0) {
pdfCell.colSpan = cellMerging.colspan
}
} else if ("group" === rowType) {
pdfCell.drawLeftBorder = false;
pdfCell.drawRightBorder = false;
if (cellIndex > 0) {
var isEmptyCellsExceptFirst = currentRow.slice(1).reduce((accumulate, pdfCell) => accumulate && !isDefined(pdfCell.text), true);
if (!isDefined(pdfCell.text) && isEmptyCellsExceptFirst) {
for (var i = 0; i < currentRow.length; i++) {
currentRow[i].colSpan = currentRow.length
}
pdfCell.colSpan = currentRow.length
}
}
}
if (options.onCellExporting) {
options.onCellExporting({
gridCell: {
value: cellData.value
},
pdfCell: pdfCell
})
}
currentRow.push(pdfCell)
}
if ("group" === rowType) {
currentRow[0].drawLeftBorder = true;
if (currentRow[0].colSpan === currentRow.length - 1) {
currentRow[0].drawRightBorder = true
}
var lastCell = currentRow[currentRow.length - 1];
if (!isDefined(lastCell.colSpan)) {
lastCell.drawRightBorder = true
}
}
rowsIndents.push(groupLevel * options.indent);
var startNewTableWithIndent = rowsIndents.length >= 2 && rowsIndents[rowsIndents.length - 1] !== rowsIndents[rowsIndents.length - 2];
if (startNewTableWithIndent) {
var indent = rowsIndents[rowsIndents.length - 1];
var prevTable = pdfGrid._currentHorizontalTables[0];
var firstColumnWidth = options.columnWidths[0] - indent;
var tableTopLeft = {
x: options.topLeft.x + indent,
y: prevTable.rect.y + prevTable.rect.h
};
pdfGrid.startNewTable(options.drawTableBorder, tableTopLeft, null, null, firstColumnWidth)
}
var rowHeight = null;
if (options.onRowExporting) {
var args = {
drawNewTableFromThisRow: {},
rowCells: currentRow
};
options.onRowExporting(args);
var {
startNewTable: startNewTable,
addPage: addPage,
tableTopLeft: _tableTopLeft,
splitToTablesByColumns: splitToTablesByColumns
} = args.drawNewTableFromThisRow;
if (true === startNewTable) {
pdfGrid.startNewTable(options.drawTableBorder, _tableTopLeft, true === addPage, splitToTablesByColumns)
}
if (isDefined(args.rowHeight)) {
rowHeight = args.rowHeight
}
}
pdfGrid.addRow(currentRow, rowHeight)
}
pdfGrid.mergeCellsBySpanAttributes();
pdfGrid.drawTo(doc);
resolve()
})
})
}
export {
exportDataGrid
};