gpt4 book ai didi

pdfMake - 宽表分页符

转载 作者:行者123 更新时间:2023-12-01 04:48:40 33 4
gpt4 key购买 nike

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

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

这可能使用pdfMake吗?

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

谢谢

最佳答案

是的, 可以做到这一点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);
    注意:如果你想让列填满所有可用的页面,这里有一个很好的实现 link .
    我刚刚为宽度添加了 '%' 并将该代码添加到 pdfmake.js .
    希望这可以帮助!

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

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com