HTML CSS打印 - 在分页符(自动)之前插入“续...”文本

时间:2014-07-18 17:18:09

标签: html css pdf-generation

带有@media print样式的HTML通过PDFreactor工具呈现,以生成PDF文件。

HTML文件中的一个页面包含一个html表。表中的行数是动态的,并使用Mustache Java插入,因此可以流经多个页面。重复<thead>时,表格会自动中断。

现在,我需要帮助的要求是在页面自动中断时插入文字续......

知道怎么做吗?

1 个答案:

答案 0 :(得分:1)

对此的一个解决方案是在页面结尾之前动态插入包含文本“continue ...”的其他表行。

PDFreactor有一个非常强大的JavaScript引擎,允许在布局期间修改DOM并访问内部布局数据,因此您可以使用以下脚本完全执行此操作:

var CONTINUED_TEXT = "continued...";
var currentPage = 0;

// iterate over tables
var tables = document.getElementsByTagName("table");

for (var i = 0; i < tables.length; i++) {
    var table = tables[i];

    // determine number of columns
    var cells = table.firstElementChild.querySelectorAll("tr:first-child td, tr:first-child th");
    var colspan = cells.length;

    for (var i = 0; i < cells.length; i++) {
        var cellColspan = parseInt(cells[i].getAttribute("colspan"));

        if (cellColspan) {
            colspan += cellColspan - 1;
        }
    }

    // iterate over rows
    var rows = table.querySelectorAll("tbody tr");

    for (var j = 0; j < rows.length; j++) {
        var row = rows[j];
        var bd = ro.layout.getBoxDescriptions(row);

        if (bd) {

            // check if a page break occurs
            if (bd[0].pageIndex > currentPage) {

                currentPage = bd[0].pageIndex;

                if (j > 0) {

                    var previousRow = rows[j - 1];

                    // create a new row
                    var continueRow = document.createElement("tr");
                    var continueCell = document.createElement("td");
                    continueCell.setAttribute("colspan", colspan);
                    continueCell.textContent = CONTINUED_TEXT;
                    continueRow.className = "continueRow";
                    continueRow.appendChild(continueCell);
                    previousRow.parentNode.insertBefore(continueRow, previousRow);

                }
            }
        }
    }
}

因此,这基本上遍历表的所有行,并通过查询PDFreactor的布局信息来查明是否发生了分页。然后它将通过操作DOM在中断之前动态插入一个带有“continue ...”文本的新表行。

要将此脚本添加到PDFreactor,请使用API​​方法

pdfReactor.addUserScript(“”,“url / to / script.js”,false);

也可以将脚本直接添加到文档中。在这种情况下,请确保启用JavaScript模式,如下所示:

pdfReactor.setJavaScriptMode(PDFreactor.JAVASCRIPT_MODE_ENABLED);

我认为只能使用CSS才能做到这一点。希望这会有所帮助。