我有一个对象列表,我想使用Freemarker迭代生成一个FOP模板,在每个页面上显示其中的四个项目。
每个项目占据页面的四分之一。
在HTML中,我可能会将div放在一起,以便它们在适合页面时一起流动,但我不知道如何使用FOP。
我尝试使用内联元素来实现这一目标,但这并不像我期望的那样有效。
<fo:page-sequence master-reference="apage">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<#list entries as entry>
<fo:inline background-color="blue" border="2px solid black">
<fo:block height="100mm" width="150mm" background-color="red" border="2px solid green">
<#include "singleCardTemplate.ftl">
</fo:block>
</fo:inline>
</#list>
</fo:block>
</fo:flow>
</fo:page-sequence>
包含的singleCardTemplate.ftl负责呈现单个项目,这似乎是有效的,只有它呈现全宽,而不是150mm,正如我所希望的那样。我喜欢彼此相邻的2x150mm宽的积木,另外还有2个。每页四个。
我很高兴Freemarker / FOP组合工作正常,我确实得到了一个PDF,其中包含正确的内容和一些边框/颜色,如上所述。
我做错了什么?
答案 0 :(得分:0)
我找到了一个解决方案,转移到表格布局。 我更喜欢使用像HTML内联块元素一样流动的布局,但这似乎有效...
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:table table-layout="fixed" height="100%">
<fo:table-column column-width="proportional-column-width(2)"/>
<fo:table-column column-width="proportional-column-width(2)"/>
<fo:table-body font-size="10pt">
<fo:table-row height="100mm">
<#list entries as entry>
<fo:table-cell margin="5mm">
<#include "singleCardTemplate.ftl">
</fo:table-cell>
<#assign mod = entry_index % 2 />
<#if entry_has_next>
<#if mod == 0>
</fo:table-row>
<fo:table-row height="100mm">
</#if>
</#if>
</#list>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:block>
</fo:flow>