gpt4 book ai didi

xsl-fo - 如何使用FOP保留带有标题的表格但允许在XSL-FO中的表格正文内分页

转载 作者:行者123 更新时间:2023-12-04 02:15:56 68 4
gpt4 key购买 nike

我正在使用 Apache FOP 和 XSL-FO 样式表生成 PDF。在 PDF 中,我输出属于表格的标题 (html equiv h1),因此应始终保持在一起。但是,我的表格也可能包含太多数据,以至于它们不一定适合一页。

期望的结果是一个规则集,它允许一个标题与表格一起保留,并在可能的情况下放在一页上,但如果表格数据太长以至于不能放在一页上,那么将在其中插入分页符表,同时仍将标题元素与表的开头保持在同一页面上。

我现在拥有的解决方案确实将标题和表格保持在一起,但是如果所有内容都不适合一页,我会收到表格数据的内容溢出错误。我希望 page-break-inside: 避免在表格元素上设置会对此有所帮助,但显然不是...建议?

示例 xsl(为了便于阅读而缩短):

<!-- add test table with header that should stay on same page -->
<fo:block font-size="20pt" font-weight="bold">Table header</fo:block>

<fo:table keep-with-previous.within-page="always"
page-break-inside="avoid"
table-layout="fixed" border-width="1mm" border-style="solid">
<fo:table-column column-width="auto" />
<fo:table-column column-width="30mm" />

<fo:table-header text-align="center" background-color="silver">
<fo:table-row>
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>First name</fo:block>
</fo:table-cell>
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>Last name</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<!-- the table-rows can be repeated N times, spanning several pages -->
<fo:table-row >
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>ab</fo:block>
</fo:table-cell>
<fo:table-cell padding="1mm" border-width="1mm" border-style="solid">
<fo:block>cd</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- .... more table-row:s --->

更新所需的输出

为了更好地描述我正在寻找的结果:

结果文档包含文本段落、标题和表格。
  • 如果内容量使得表格在下一页上只有一两行,那么 xsl-fo 应该将整个表格和标题移动到下一页,前提是它完全适合该页面。
  • 另一方面,如果表格中的行太多,以至于无论如何都无法放在一个全新的页面上,那么应该立即在文档流中开始输出,同时仍允许将表格拆分为多个页面。

  • 如果我删除 page-break-inside="avoid",那么我会得到一个可以很好地跨越多个页面的表格,但是 #1 中描述的情况将不匹配。 IE。它不会移动表格,并且如果只有几行最终被移动到下一页,它会完全转到下一页。如果我将分页符保留在里面,那么我会遇到长表的内容溢出问题,因为不适合页面的行不会移动到下一页。

    我想基本问题之一是我的输出表的长度非常动态,不幸的是我无法控制在表中生成的数据量。

    最佳答案

    CSS 属性 page-break-inside="avoid"映射到 native FO 属性 keep-together="always"。这种映射在 IMO 上是有问题的(但那是另一回事了)。无论如何,我建议您使用 native FO 属性 keep-together.within-column="1"而不是分页内。这允许 Apache FOP 在绝对必要时打破表格。

    关于xsl-fo - 如何使用FOP保留带有标题的表格但允许在XSL-FO中的表格正文内分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214906/

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