1

我正在使用 Dita-OT 2.1.0,并尝试为我的 Dita 文档自定义 PDF 输出。我的文档由许多表格组成,这些表格可能很短,也可能很长。我想做的是尽可能防止表格分成多个页面。例如,如果可以防止表格分成两页,我想在表格之前有一个新页面。

我试图将它放入我的 custom.xsl

<xsl:attribute-set name="tbody.row">
<xsl:attribute name="keep-with-next.within-page">always</xsl:attribute>
</xsl:attribute-set>

这似乎使行保持在同一页面上,但是如果一行足够长可以转到下一页,那么它就会去那里,而不是仅仅将整个表移到那里..有什么想法可以解决这个问题吗?

有设置

<xsl:attribute-set name="table">
    <xsl:attribute name="keep-together.within-page">always</xsl:attribute>
</xsl:attribute-set>

它仍然不起作用。现在表格保持在同一页面上,但超过 1 页的表格不会完全显示。

4

3 回答 3

1

您还应该尝试以下方法:

<xsl:attribute name="keep-together.within-page">1</xsl:attribute>

可以在这里找到答案的可能解释: http ://www.dpawson.co.uk/xsl/sect3/keepsNbreaks.html

于 2015-09-02T13:09:35.167 回答
0

这个问题是一个棘手的问题,因为您必须牺牲灵活性来换取输出的外观。您可以将 outputclass 属性添加到表中,以使输出在表之前中断并更改表处理,以便将表包含在一个块中,并在 fo 中应用了 break-before 属性。我暂时没有查看表的基本代码,但它可能需要您创建一个选择场景来应用该块。

于 2015-09-03T11:14:38.017 回答
0

在一次性过程中不可能做你想做的事。

如果表格可以放在页面上,您可以使用 keep-together.within-page 来强制执行此操作,但是在生成表格时,没有一般方法可以知道表格的大小。

FO 没有提供任何方式来说明“当且仅当整个页面适合时,将整个表格保留在页面内,否则,根据需要将其打破”。

有多种方法可以进行多通道处理,以便您可以更精确地调整表格布局,但这需要一些自定义编程并且依赖于特定的 FO 引擎(尽管有一个选项可以与 Antenna House 或 FOP 一起使用:http://www.w3.org/community/ppl/wiki/XSLTExtensions

一种折衷的解决方案是在前n行上使用 keep-with-next 以确保表不会过早中断,但只有在行的深度一致时才有效——如果行深度可以变化很大,那么你可以仍然存在前n行超过一页然后繁荣的情况。

于 2015-09-03T13:40:52.617 回答