我试图修改现有的XML模板,以便与NetSuite的BFO PDF报告生成器实现一起使用。基本结构是一个包含两行和两列的表,其中第一行执行列合并。在第二行中,一列填充数据,另一列填充图像。图像很小,显示适合第一页。但是,数据列提供了不同数量的信息,并且一些信息以HTML格式提供(例如无序列表)。问题是,有时会有很多数据,并且它会在没有分页符的情况下运行。在某些情况下,我能够重构数据或执行一些神奇的技巧,以减小大小或中断第二页的块添加力。但是,在无序列表的情况下,我无法做任何事情。
我尝试在 TR 标记周围强制使用 TBODY 标记,尝试强制使用page-break-inside属性。似乎没什么用。例如,这是我得到的长列表:
您可以看到内容与页脚重叠的方式。 这就是我对所讨论的表格行的看法:
<tbody page-break-inside="auto">
<tr style="border-top:4px solid; padding-bottom:10px;" page-break-inside="auto">
内容也封装在 DIV 标记中:
<div id="itemDetails" style="min-width: 0px; max-width:545px;">
使用此特定示例,源记录中有两个内容字段,包含HTML格式的无序列表,并且都没有应用任何样式。这里是较小的源块(恰好是从显示页面的底部切掉):
<ul>
<li>All the Advantages of Altivar 31 Drive</li>
<li>Excellent Resistance to Harsh Environments (50° C)</li>
<li>Coated Cards as Standard (IEC 60721-3-3 Classes 3c2 and 3s2)</li>
<li>Excellent Resistance to Power Supply and Motor Interference</li>
<li>0.25 HP to 20 HP</li>
<li>Single-Phase 200 V to 240 V, Three-Phase 200 V to 240 V, Three-Phase 380 V to 500 V, Three-Phase 525 V to 600 V</li>
<li>Integrated Class 2 Emc Filter for Radiated and Conducted Emissions</li>
<li>Din Rail Mounting</li>
</ul>
有关什么可能有助于将此数据分页的任何建议?我觉得这是一个我没想过的明显的解决方案。
答案 0 :(得分:0)
在尝试过去一周解决相同的问题之后,如果列表中的信息长于单个页面上的信息,我决定在列出信息时进行分页。 OP的评论指出了我的方向 - 您需要使用/省略嵌套元素将其拉下来。
如果我要显示的数据长度小于单个页面上的数据长度,则我使用div
和page-break-inside: avoid;
。否则我省略div
并只使用表格 - 这允许表格行分成多个页面。
对于以下示例,我的主数据对象是searchResults
。它包含valueArr
的属性,这是我需要在打印输出中显示的哈希数组。对于此类打印输出,我将styleObj.maxCoilsPerPage
设置为30;您需要将此更改为适合您案例中单个页面的行数。
CSS片段:
.nopagebreak {
page-break-inside: avoid;
}
HTML片段:
<#list searchResults.valueArr as item>
<#if (item.valueArr?size lte styleObj.maxCoilsPerPage?number)>
<div class="nopagebreak">
</#if>
<table>
<tr>
<td width="70%">${item.itemName}</td>
...other table data...
</table>
<#if (item.valueArr?size lte styleObj.maxCoilsPerPage?number)>
</div>
</#if>
</#list>