@media print
样式的HTML通过PDFreactor工具呈现,以生成PDF文件。
HTML文件中的一个页面包含一个html表。表中的行数是动态的,并使用Mustache Java插入,因此可以流经多个页面。重复<thead>
时,表格会自动中断。
现在,我需要帮助的要求是在页面自动中断时插入文字续...... 。
知道怎么做吗?
答案 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才能做到这一点。希望这会有所帮助。