【问题标题】:Keep table in single page on PDF将表格保存在 PDF 的单页中
【发布时间】:2015-11-27 15:56:34
【问题描述】:

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

【问题讨论】:

    标签: dita dita-ot


    【解决方案1】:

    您还应该尝试以下方法:

    &lt;xsl:attribute name="keep-together.within-page"&gt;1&lt;/xsl:attribute&gt;

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

    【讨论】:

    • 这看起来很有希望。谢谢!到目前为止唯一的问题是,即使表格继续到下一页,每页末尾都有黑色边框指示表格结束。所以一张桌子有一种“两个”结尾,但只有一个“开始”边框。
    • 我不确定,可能是 Apache FOP 中的错误。也许你也可以试试像 XEP 或 Antenna House 这样的商业处理器。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 2023-03-18
        • 1970-01-01
        • 2015-06-18
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        相关资源
        最近更新 更多