OK może wyjaśnię o co mi chodzi trochę w przykładzie, a trochę opisując.
Mam 4 zmienne - a1b1, a1b2, a1b3, a1b4, które reprezentują 4 kluczowe informacje do prezentacji w wierszach w tabeli. Cyfra po "b" w nazwie odpowiada wierszowi tabeli.
Pytanie sprowadza się do tego co zrobić żeby generować pdfa z powtarzalnymi osobnymi tabelkami w tym samym pdfie gdyby takich czwórek powtarzalnych zmiennych było wielokrotność czyli np dalej a2b1, a2b2, a2b3, a2b4 potem a3b1, a3b2, a3b3, a3b4 itd., przy czym to ile wystąpi czwórek nie jest oczywiście z góry ustalone zależy od użytkownika - mooże być 1 a może być 115 . Zdaje sobie sprawę, że można zamiast mojego dziwnego nazewnictwa zmiennych stosować tablicę dwuwymiarową, ale w temacie, o który pytam chyba nie robi to różnicy.
Dla tego wydało mi się wygodne korzystanie ze zwykłego stringa, bo wtedy łatwo przy użyciu konkatenacji zbudować to co potrzebne i myślałem, że da się to "przerobić" na zmienną o konstrukcji, z której korzysta pdfmake, ale o zadanej liczbie tabelek.
<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta charset="utf-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.4/pdfmake.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.4/vfs_fonts.js"></script>
<script type="text/javascript">
function pobierz() {
a1b1 = 100
a1b2 = 200
a1b3 = 300
a1b4 = 400
const przedmioty = [];
for (i = 0; i <= 4; i++) {
var n = "a1b" + i
if (i == 0) przedmioty.push(["Nazwa kolumny 1", "Nazwa kolumny 2"]);
if (i > 0) przedmioty.push(["Opis wiersza" + i, window[n]]);
}
const pdf = createPdf({
content: [{
table: {
widths: [70, 70],
body: przedmioty,
}
}, ]
});
pdf.download();
}
</script>
</head>
<body>
<input type="button" value="Zapisz PDF" onclick="pobierz()" />
</body>
Inaczej mawiać żeby osiągnąć efekt drukowania czegoś takiego, przy czym nie konkretnej ilości tabelek (tutaj 2) tylko ilości w razie potrzeb, w zależności od dostarczonych danych.
const pdf = createPdf({
content: [{
table: {
widths: [70, 70],
body: przedmioty,
}
},
{
table: {
widths: [70, 70],
body: przedmioty1,
}
},]
});
pdf.download();
}