Подогнать длинную таблицу или 2 страницы содержимого на 1 странице в pdfMake
Я пытаюсь сгенерировать PDF с помощью pdfMake с динамическим числом строк. Но иногда, если количество строк больше, оно автоматически переходит на вторую страницу.
var po = $('.p-order').clone();
var rows = [];
var rspan = 0;
var rOdinal = -1;
var totalCols = 0;
var width = [];
var forRows = -1;
var currRowIndex = -1;
var targetColsSpan = -1;
var PONo = $('#PONo').text();
var isInterStateTax = $('#isInterStateTax').text();
var processedby = $('#hdnProcessedBy').val();
var verifiedby = $('#hdnVerifiedBy').val();
$(po).find('tr').each(function () {
var rw = $(this);
if (!$(rw).hasClass('pdf-ignore')) {
var columns = [];
var cols = $(rw).find('td').length;
var text = '';
var fontsize = 7;
var mar = 0;
var align = 'center';
currRowIndex++;
for (var j = 0; j < cols; j++) {
if (rOdinal == j && currRowIndex <= forRows) {
for (var i = 0; i < targetColsSpan; i++) {
columns.push({});
}
if (currRowIndex == forRows) {
rOdinal = -1;
targetColsSpan = -1;
}
}
var cspan = $($(rw).find('td')[j]).prop('colSpan');
rspan = $($(rw).find('td')[j]).prop('rowSpan');
if ($($(rw).find('td')[j]).data("empty") != null || $($(rw).find('td')[j]).data("empty") != undefined)
mar = 0;
else
mar = 0;
if ($($(rw).find('td')[j]).data("align") != null || $($(rw).find('td')[j]).data("align") != undefined)
align = $($(rw).find('td')[j]).data("align");
else
align = 'center';
text = $($(rw).find('td')[j]).find('span').text().trim();
if (text == undefined || text == '') {
text = $($(rw).find('td')[j]).text().trim();
if (currRowIndex == 0)
fontsize = 11;
}
else {
fontsize = $($(rw).find('td')[j]).find('span').css('font-size');
}
if (fontsize == undefined)
fontsize = 7;
if (text == undefined)
text = '';
if (cspan != null && cspan > 1) {
if (rspan != null && rspan > 1) {
columns.push({
text: '' + text + '', fontSize: fontsize, margin: [0, mar, 0, mar], colSpan: '' + cspan + '', rowSpan: rspan, alignment: '' + align + ''
});
rOdinal = j;
forRows = rspan - 1;
targetColsSpan = cspan;
}
else
columns.push({ text: '' + text + '', fontSize: fontsize, margin: [0, mar, 0, mar], colSpan: '' + cspan + '', alignment: '' + align + '' });
for (var i = 1; i < cspan; i++) {
columns.push({});
}
}
else {
if (rspan != null && rspan > 1) {
columns.push({ text: '' + text + '', fontSize: fontsize, margin: [0, mar, 0, mar], rowSpan: rspan, alignment: '' + align + '' });
rOdinal = j;
forRows = rspan - 1;
}
else
columns.push({ text: '' + text + '', fontSize: fontsize, margin: [0, mar, 0, mar], alignment: '' + align + '' });
}
}
if (cols > totalCols)
totalCols = cols;
if (cols > 0)
rows.push(columns);
}
});
var startAt = $('#startAt').text();
var penul = $('#penul').text();
var last = $('#last').text();
if (rows.length >= 20 && rows.length <= 25) {
columns = [];
columns.push({ text: '', colSpan: isInterStateTax == 'true' ? 13 : 12, margin: [0, 70, 0, 0], border: [false, false, false, false] });
if (isInterStateTax == 'true')
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
columns.push({ text: '', margin: [0, 5, 0, 0] });
rows.push(columns);
}
columns = [];
columns.push({ text: startAt, fontSize: 7, margin: [0, 0, 0, 0], alignment: 'center' });
columns.push({ text: penul, colSpan: isInterStateTax == 'true' ? 7 : 6, fontSize: 7, margin: [0, 0, 0, 0] });
if (isInterStateTax == 'true')
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: 'For Team' , colSpan: 5, rowSpan: 4, fontSize: 7, border: [true, true, true, false] });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
rows.push(columns);
columns = [];
columns.push({ text: (parseInt(startAt) + 1).toString(), fontSize: 7, margin: [0, 0, 0, 0], alignment: 'center' });
columns.push({ text: last, colSpan: isInterStateTax == 'true' ? 7 : 6, fontSize: 7, margin: [0, 0, 0, 0] });
if (isInterStateTax == 'true')
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
columns.push({ text: '' });
rows.push(columns);
var docDefinition = {
pageSize: 'A4',
content: [
{
style: 'tableExample',
table: {
widths: width,
body: rows
}
},
]
,
footer: function (currentPage, pageCount) { return { text: currentPage.toString() + ' of ' + pageCount, fontSize: 6, alignment: 'right', margin: [0, 0, 20, 40] } },
styles: {
tableExample: {
margin: [20, 0, 20, 5]
}
},
defaultStyle: {
lineHeight: 1.2
}
};
pdfMake.createPdf(docDefinition).download(PONo + '.pdf');
Я хочу, чтобы содержимое помещалось на одной странице. Мой контент никогда не выйдет за пределы страницы 2 и того, что я хочу на 1 странице. Это возможно с динамическим контентом. Пожалуйста, ведите меня.