如何在jsPDF Autotable中动态添加输入字段值?

How to add input field values in jsPDF Autotable dynamically?

提问人:Phil-Absynth 提问时间:11/17/2023 更新时间:11/17/2023 访问量:32

问:

我正在创建一个包含三列的 HTML 表格形式的月计划,其中第一列是当天的日期,第二列是输入字段值,第三列是电话号码。

var pdf = new jsPDF({
    orientation: 'p',
    unit: 'mm',
    format: 'a4',
    putOnlyUsedFonts: true
});
var elem = document.getElementById("table-");
var res = pdf.autoTableHtmlToJson(elem);
pdf.autoTable(res.columns, res.data, {
    startY: 30,
    tableWidth: 'auto',
    theme: 'grid',
    headStyles: {
        fillColor: '#a9a6a6',
        textColor: '#000000'
    },
    columnStyles: {
        0: { cellWidth: 15 }
    }
});
pdf.save(`Test.pdf`);

这将正确创建第一列和第三列,但不会在第二列中显示输入字段值。这些值存储在 localStorage 中,可以从那里加载,但我不知道如何将它们添加到自动表中。

javascript 输入 jspdf-autotable

评论


答:

0赞 Phil-Absynth 11/17/2023 #1

我从 Autotable GitHub 示例中找到并修改了一个函数,它现在可以工作了。

function dynamicRows(rowCount) {
    rowCount = rowCount || 10
    var body = []
    for (var j = 1; j <= rowCount; j++) {
        body.push({
            datum: '//content here',
            Mitarbeiter: localStorage.getItem('key name'),
            id: j
        })
    }
    return body
}

然后是创建 Autotable 的函数

function createAutotable(month, year) {
    var pdf = new jsPDF({
        orientation: 'p',
        unit: 'mm',
        format: 'a4',
        putOnlyUsedFonts: true
    });

    const monthNumber = moment().month(month).format('M');
    const daysInMonth = moment(`${year}-${monthNumber}`, 'YYYY-MM').daysInMonth();

    var body = dynamicRows(daysInMonth);
    body.forEach(function (row) {
        row[0] = row.datum;
        row[1] = row.Mitarbeiter;
        row[2] = row.id;
    });
    pdf.autoTable({
        startY: 30,
        tableWidth: 'auto',
        theme: 'grid',
        head: [
            //headers here
        ],
        body: body
    });
    pdf.save('test.pdf');
}