将表格保存为单页PDF格式



我使用的是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页的表不完全显示

您还应该尝试这样做:

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

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

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

不可能在一次过程中完成您想要的。

如果一个表可以放在一个页面上,你可以使用保持在一起。但是当你生成表的时候,一般没有办法知道表的大小。

FO没有提供任何方法来说明"当且仅当整个页面适合时,将整个表保留在页面中,否则,根据需要将其断开"。

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

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