sách gpt4 ai đã đi

pdfMake - 宽表分页符

In lại 作者:行者123 更新时间:2023-12-01 04:48:40 33 4
mua khóa gpt4 Nike

我正在使用 pdfMake 生成表格报告。一些报告非常宽,不适合标准页面宽度,即使在横向模式下也是如此。目前,当表格内容溢出页边距时,pdfMake 会切断表格内容。

我想在表格太宽时分页,就像行溢出到下一页时一样。

这可能使用pdfMake吗?

可以使用 pageBreakBefore 回调函数对此有帮助吗?

Cảm ơn

1 Câu trả lời

是的, 可以做到这一点pdfMake ,即使当前不是功能。
为此,您只需将溢出的列拆分到另一个表中 .我们可以将所有表放在一个数组中,然后将它们设置在 docDefinition如下。
可以在模板构造函数中定义表中所需的任何公共(public)属性。

for (var i = 0; i < tables.length;i++) {
docDefinition.content[i] = new Template();
docDefinition.content[i].table.body = tables[i];
docDefinition.content[i].table.widths = widths[i];
if (i > 0) {
docDefinition.content[i].pageBreak = 'before';
}
}

function Template(){
this.table = {
dontBreakRows: true
};
//zebra stripes layout
this.layout = {
fillColor: function (row, node, col) {
return (row % 2 === 0) ? '#CCCCCC' : null;
}
}
}
我们如何确定列是否会溢出?我们有两个选择:
  • 如果您使用的是引导数据表,则可以使用 html 中的“宽度”属性。
  • pdfmake 计算实际宽度,但您可能需要在 pdfmake.js 中进行挖掘.

  • 然后,只需循环,添加宽度直到超出限制(我的限制是 8pt 字体)。您可以对 TH 执行此操作,然后保存这些列拆分并将其用于 TD。
    如果最后一页刚刚溢出,我们不希望最后一页只有一列,我们希望每个页面都有 宽度大致相同 .我们计算所需的页数,然后从那里找到所需的断点。要更轻松地将页面链接在一起,您可以在每个表格的开头添加行号列。
    var colSplits = [];
    var tables = new Array();

    function parseTHs(colSplits, tables) {
    var colSum = 0;
    var pageSize = 1120-7*rows.toString().length;
    var paddingDiff = 11.9;
    var columns = 0;
    var prevSum;
    var i = 0;
    var width = $(".dataTables_scrollHeadInner > table").width();
    var pages = Math.ceil(width/pageSize);
    console.log("pages: "+pages);
    var desiredBreakPoint = width/pages;
    console.log("spread: "+desiredBreakPoint);
    var limit = pageSize;
    var row = ['#'];
    var percent = '%';
    widths.push(percent);
    $(".dataTables_scrollHeadInner > table > thead > tr:first > th").each(function() {
    prevSum = colSum;
    colSum += $(this).outerWidth()-paddingDiff;
    //if adding column brings us farther away from the desiredBreakPoint than before, kick it to next table
    if (colSum > limit || desiredBreakPoint-colSum > desiredBreakPoint-prevSum) {
    tables[i] = [row];
    row = ['#'];
    widths.push(percent);
    colSplits.push(columns);
    i++;
    desiredBreakPoint += width/pages;
    limit = prevSum+pageSize;
    }
    row.push({text: $(this).text(), style:'header'});
    widths.push(percent);
    columns++;
    });
    //add the final set of columns
    tables[i] = [row];
    }

    function parseTDs(colSplits, tables) {
    var currentRow = 0;
    $("#"+tableId+" > tbody > tr").each(function() {
    var i = 0;
    var row = [currentRow+1];
    var currentColumn = 0;
    var split = colSplits[i];
    $(this).find("td").each(function() {
    if (currentColumn === split) {
    tables[i].push(row);
    row = [currentRow+1];
    i++;
    split = colSplits[i];
    }
    row.push({text: $(this).text()});
    currentColumn++;
    });
    //add the final set of columns
    tables[i].push(row);
    currentRow++;
    });
    }

    parseTHs(colSplits, tables);
    parseTDs(colSplits, tables);
    注意:如果你想让列填满所有可用的页面,这里有一个很好的实现 liên kết .
    我刚刚为宽度添加了 '%' 并将该代码添加到 pdfmake.js .
    希望这可以帮助!

    关于pdfMake - 宽表分页符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183273/

    33 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com