将表保存在PDF上的单页中

时间:2015-09-02 08:24:42

标签: dita dita-ot

我正在使用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页的表格不会完全显示。

3 个答案:

答案 0 :(得分:1)

你也应该尝试类似的事情:

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

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

答案 1 :(得分:0)

这个问题很棘手,因为你必须为输出的外观交换灵活性。您可以向表中添加outputclass属性,以使输出在表之前中断并更改表处理,以便将表括在具有应用于fo的break-before属性的块中。我暂时没有查看表的基本代码,但可能需要您创建一个选择方案来应用该块。

答案 2 :(得分:0)

在一次通过过程中无法做到你想做的事。

如果一个表可以放在页面上,你可以使用keep-together.within-page来强制它,但是当你生成表时,没有一般方法可以知道表的大小。

FO没有提供任何方式说“当且仅当整个页面适合时保持整个表格,否则,根据需要打破它”。

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

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