将表格保存在 PDF 的单页中

Posted

技术标签:

【中文标题】将表格保存在 PDF 的单页中【英文标题】:Keep table in single page on 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 页的表格不会完全显示。

【问题讨论】:

【参考方案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 行超过一页然后繁荣的情况。

【讨论】:

以上是关于将表格保存在 PDF 的单页中的主要内容,如果未能解决你的问题,请参考以下文章

PDFBox:通过重复添加包含表单的单页模板来填写 PDF

如何使用 SWIFT 显示多文档 PDF 页面的单页

Autodesk Forge 查看器仅渲染 PDF 文件的单页

Laravel Livewire 在一页中进行多个分页

word怎么一页中画多个表格

当我在电子表格中插入图像然后将其转换为pdf时,我的应用程序脚本存在问题。该图像未出现在文档pdf中