#javascript #angular #pdfmake
Вопрос:
Я смог создать один pdf-файл, используя следующий код.
this.docDefinition = {
pageSize: 'LETTER',
pageOrientation: 'landscape',
pageMargins: [40, 30, 40, 30],
header: function (page, pages) {
return {
height: 14,
text: 'Sample',
style: 'titleHeader',
alignment: 'center'
};
},
content: [
this.buildSectionPatientInfo(),
{
table: {
widths: ['50%', '50%'],
headerRows: 0,
body: [
[
// RIGHT SIDE
[
this.buildSectionServices(),
this.buildSectionLabUseOnly()
],
// LEFT SIDE
[
this.buildSectionFrame(),
this.buildSectionSpecialInstructionsLab()
]
]
]
},
layout: 'noBorders'
},
],
styles: {
titleHeader: {
fontSize: 16,
bold: true,
margin: [0, 10, 0, 0],
},
tableHeader: {
bold: true,
fontSize: 13,
color: 'black'
}
},
defaultStyle: {
fontSize: 9,
lineHeight: .9
}
};
try {
pdfMake.createPdf(this.docDefinition).open();
} catch (e) {
// check popup/ad blockers
alert(e.toString());
}
Но теперь у меня возникли проблемы с созданием нескольких PDF-файлов и объединением их в один pfd. Я попытался поместить цикл for внутри содержимого, но он выдает ошибки.
…………………..
content: [
for (const labOrder of selectedLabOrders) {
this.buildSectionPatientInfo(),
{
table: {
widths: ['50%', '50%'],
headerRows: 0,
body: [
[
// RIGHT SIDE
[
this.buildSectionLabInfo(),
this.buildSectionLabUseOnly()
],
// LEFT SIDE
[
this.buildSectionFrame(),
this.buildSectionSpecialInstructionsLab()
]
]
]
},
layout: 'noBorders'
},
}
],
………….
Я был бы очень признателен, если бы кто-нибудь мог предложить решение для этого.
Ответ №1:
Выполните свои циклы перед созданием определения документа. Затем просто добавьте его в свой контент, вот так:
const tables = [];
for (const labOrder of selectedLabOrders) {
tables.push(
this.buildSectionPatientInfo(),
{
table: {
widths: ['50%', '50%'],
headerRows: 0,
body: [
[
// RIGHT SIDE
[
this.buildSectionLabInfo(),
this.buildSectionLabUseOnly()
],
// LEFT SIDE
[
this.buildSectionFrame(),
this.buildSectionSpecialInstructionsLab()
]
]
]
},
layout: 'noBorders'
})
}
Затем добавьте таблицы в свой контент:
this.docDefinition = {
pageSize: 'LETTER',
pageOrientation: 'landscape',
pageMargins: [40, 30, 40, 30],
header: function (page, pages) {
return {
height: 14,
text: 'Sample',
style: 'titleHeader',
alignment: 'center'
};
},
content: [
{ tables }
],
styles: {
titleHeader: {
fontSize: 16,
bold: true,
margin: [0, 10, 0, 0],
},
tableHeader: {
bold: true,
fontSize: 13,
color: 'black'
}
},
defaultStyle: {
fontSize: 9,
lineHeight: .9
}
};
try {
pdfMake.createPdf(this.docDefinition).open();
} catch (e) {
// check popup/ad blockers
alert(e.toString());
}
Комментарии:
1. Спасибо, Георгиос! Это работает.