jspdf-autotable
Version:
Generate pdf tables with javascript (jsPDF plugin)
124 lines (103 loc) • 3.61 kB
text/typescript
import {drawTable, addPage} from './tableDrawer';
import {calculateWidths} from './widthCalculator';
import {parseInput} from './inputParser';
import {setDefaults, setupState, resetState} from './state';
import './autoTableText';
import {applyUserStyles} from "./common";
const jsPDF = require('jspdf');
jsPDF.API.autoTable = function() {
setupState(this);
// 1. Parse and unify user input
let table = parseInput(arguments);
// 2. Calculate preliminary table, column, row and cell dimensions
calculateWidths(table);
// 3. Output table to pdf
drawTable(table);
table.finalY = table.cursor.y;
this.previousAutoTable = table;
this.lastAutoTable = table;
this.autoTable.previous = table; // Deprecated
applyUserStyles();
resetState();
return this;
};
// Assign false to enable `doc.lastAutoTable.finalY || 40` sugar;
jsPDF.API.lastAutoTable = false;
jsPDF.API.previousAutoTable = false; // deprecated in v3
jsPDF.API.autoTable.previous = false; // deprecated in v3
jsPDF.API.autoTableSetDefaults = function(defaults) {
setDefaults(defaults, this);
return this;
};
jsPDF.autoTableSetDefaults = function(defaults, doc) {
setDefaults(defaults, doc);
return this;
};
/**
* @Deprecated. Use html option instead doc.autoTable(html: '#table')
*/
jsPDF.API.autoTableHtmlToJson = function(tableElem, includeHiddenElements) {
console.error("Use of deprecated function: autoTableHtmlToJson. Use html option instead.");
includeHiddenElements = includeHiddenElements || false;
if (!tableElem || !(tableElem instanceof HTMLTableElement)) {
console.error("A HTMLTableElement has to be sent to autoTableHtmlToJson");
return null;
}
let columns = {}, rows = [];
let header = tableElem.rows[0];
for (let i = 0; i < header.cells.length; i++) {
let cell = header.cells[i];
let style = window.getComputedStyle(cell);
if (includeHiddenElements || style.display !== 'none') {
columns[i] = cell;
}
}
for (let i = 1; i < tableElem.rows.length; i++) {
let tableRow = tableElem.rows[i];
let style = window.getComputedStyle(tableRow);
if (includeHiddenElements || style.display !== 'none') {
let rowData = [];
Object.keys(columns).forEach(function(key) {
let cell = tableRow.cells[key];
rowData.push(cell);
});
rows.push(rowData);
}
}
let values = Object.keys(columns).map(function(key) {
return columns[key]
});
return {columns: values, rows: rows, data: rows};
};
/**
* @deprecated
*/
jsPDF.API.autoTableEndPosY = function() {
console.error("Use of deprecated function: autoTableEndPosY. Use doc.previousAutoTable.finalY instead.");
let prev = this.previousAutoTable;
if (prev.cursor && typeof prev.cursor.y === 'number') {
return prev.cursor.y;
} else {
return 0;
}
};
/**
* @deprecated
*/
jsPDF.API.autoTableAddPageContent = function(hook) {
console.error("Use of deprecated function: autoTableAddPageContent. Use jsPDF.autoTableSetDefaults({didDrawPage: () => {}}) instead.");
if (!jsPDF.API.autoTable.globalDefaults) {
jsPDF.API.autoTable.globalDefaults = {};
}
jsPDF.API.autoTable.globalDefaults.addPageContent = hook;
return this;
};
/**
* @deprecated
*/
jsPDF.API.autoTableAddPage = function() {
console.error("Use of deprecated function: autoTableAddPage. Use doc.addPage()");
this.addPage();
return this;
};
;