fix(export): "Summe" im PDF nicht mehr in der schmalen Spalte quetschen
Die Summenzeile des Stundennachweises trug ihre Beschriftung in der Spalte
"Tag". Die ist rund 40 Punkt breit, also brach "Summe" dort in drei Zeilen
um ("Su/mm/e"), waehrend die Zahlen rechts daneben in einer Zeile standen.
drawRow laesst in der Summenzeile eine Beschriftung jetzt in die leeren
Spalten dahinter laufen und setzt sie einzeilig. Gefuellte Spalten werden
nicht einverleibt, die Zahlen bleiben also an ihrem Platz. Das gilt fuer
alle PDF-Tabellen, nicht nur den Stundennachweis; Excel und CSV waren nie
betroffen.
Rueckbau: diesen Commit reverten - die Aenderung steckt allein in
export/render.js.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9576d18abc
commit
7606df9280
@@ -392,10 +392,23 @@ function drawTable(pdf, table, { left, width, accent }) {
|
||||
}
|
||||
header();
|
||||
|
||||
const drawRow = (data, { zebra = false, bold = false } = {}) => {
|
||||
const drawRow = (data, { zebra = false, bold = false, merge = false } = {}) => {
|
||||
const texts = table.columns.map((c) => formatCell(data[c.key], c.type));
|
||||
/*
|
||||
* In der Summenzeile darf eine Beschriftung in die leeren Spalten dahinter
|
||||
* laufen. Ohne das stand "Summe" in der schmalen Spalte "Tag" und brach
|
||||
* dort in drei Zeilen um ("Su/mm/e"), waehrend rechts daneben die Zahlen
|
||||
* standen. Die Zahlenspalten selbst bleiben unberuehrt, weil sie gefuellt
|
||||
* sind und deshalb nicht einverleibt werden.
|
||||
*/
|
||||
const spans = cols.map((w, i) => {
|
||||
if (!merge || !texts[i]) return w;
|
||||
let total = w;
|
||||
for (let j = i + 1; j < texts.length && !texts[j]; j++) total += cols[j];
|
||||
return total;
|
||||
});
|
||||
pdf.font(bold ? 'Helvetica-Bold' : 'Helvetica').fontSize(8.5);
|
||||
const height = Math.max(16, ...texts.map((t, i) => pdf.heightOfString(t || ' ', { width: cols[i] - 10 }) + 8));
|
||||
const height = Math.max(16, ...texts.map((t, i) => pdf.heightOfString(t || ' ', { width: spans[i] - 10 }) + 8));
|
||||
if (pdf.y + height > bottomLimit()) {
|
||||
pdf.addPage();
|
||||
header();
|
||||
@@ -408,8 +421,10 @@ function drawTable(pdf, table, { left, width, accent }) {
|
||||
let x = left;
|
||||
texts.forEach((text, i) => {
|
||||
pdf.font(bold ? 'Helvetica-Bold' : 'Helvetica').fontSize(8.5).fillColor('#1F1F1F').text(text, x + 5, y + 4, {
|
||||
width: cols[i] - 10,
|
||||
width: spans[i] - 10,
|
||||
align: table.columns[i].align || 'left',
|
||||
// Eine Summenzeile bleibt einzeilig; lieber gekuerzt als gequetscht.
|
||||
...(merge ? { lineBreak: false, ellipsis: true } : {}),
|
||||
});
|
||||
x += cols[i];
|
||||
});
|
||||
@@ -422,7 +437,7 @@ function drawTable(pdf, table, { left, width, accent }) {
|
||||
pdf.y += 10;
|
||||
}
|
||||
table.rows.forEach((row, index) => drawRow(row, { zebra: index % 2 === 1 }));
|
||||
if (table.totals) drawRow(table.totals, { bold: true });
|
||||
if (table.totals) drawRow(table.totals, { bold: true, merge: true });
|
||||
pdf.x = left;
|
||||
pdf.moveDown(0.8);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user