使用 XSLT 2.0 检查 <fo:page-number> 是不是为偶数
Posted
技术标签:
【中文标题】使用 XSLT 2.0 检查 <fo:page-number> 是不是为偶数【英文标题】:Check if <fo:page-number> is even or not using XSLT 2.0使用 XSLT 2.0 检查 <fo:page-number> 是否为偶数 【发布时间】:2021-10-10 07:47:32 【问题描述】:如何使用 xslt 2.0 检查
【问题讨论】:
你能举个例子、模型或图形来说明你想做的事情吗? 【参考方案1】:XSLT 阶段生成 XSL-FO,然后格式化程序将其制成页面。所以,不,您在生成 XSL-FO 时无法获取当前页码。
如果是偶数页,你想改变什么?
使用 XSL-FO,您可以为奇数页和偶数页(以及更多)设置不同的页面母版。不同的页面母版可以有不同的页边距,您可以进行设置,以便格式化程序将不同的内容定向到偶数页上的页眉和页脚,而不是奇数页上使用的内容。
请参阅https://www.antennahouse.com/xsl-fo-samples#structure“XSL-FO 示例集合”中的“页面区域和结构”PDF 和 FO 文件
【讨论】:
如果某个特定块的页面很奇怪,我想打破页面 有没有办法将页码存储在变量中并检查它是否是偶数。只有页码才能帮助我解决要求。【参考方案2】:使用真正的批处理格式化程序无法一次性完成您的要求。它需要“人工”干预来仅标记需要中断的地方,而不是其他地方。
此外,不能保证一个 XSL FO 格式化程序可能会产生与另一个不同的结果。由于某些格式化程序处理“行紧”(即非常小的空间和字符挤压在一起以使文本适合一行中的文本)以及一些支持字距调整和其他许多其他因素的方式的复杂性,它是无法“预先预测”某个段落是否会出现/开始在页面上。
在真正的排版中格式化文本不仅仅是字空间字空间......还有许多其他因素可能会改变段落中的行数在一个格式化程序和另一个格式化程序之间很容易波纹到已知段落存在于一个格式化程序中的偶数页上,但存在于不同格式化程序中的奇数页上。
然后,您还需要其他规则,例如,如果使用您选择的格式化程序的段落是您希望中断的页面上的第一个段落。你想要一个空白页吗?也许吧,谁知道呢?
完成任务的唯一方法是通过可以实现的多通道方法,使其对任何格式化程序都是通用的。您将需要格式化整个文档(或者如果您使用页面母版将该文档分块)至少一个以页面边界开始和结束的块。格式化它,在第一段测试你的情况。如果它通过(意味着是否需要中断),则返回原始内容(或修改 XSL FO)并标记一些会导致该结构上的 break-before="page" 的属性。然后重复该过程,直到到达文档的末尾。一些格式化程序可以为您提供区域树和可以放置在该树中的标记,以便您可以通过编程而不是肉眼来执行此操作。
如果您的文档很长且按一页顺序排列(例如格式化时为 3000 页)并且您的中断条件很频繁,您可能需要重复该过程 700 多次。
如前所述,某些格式化程序通过其 API 可能允许您以编程方式进行控制。您可以检查区域树,寻找您的标记并保持页数。您甚至可以在中断条件下重新开始格式化而不是重新开始,但您需要对这些内容进行编程。
【讨论】:
以上是关于使用 XSLT 2.0 检查 <fo:page-number> 是不是为偶数的主要内容,如果未能解决你的问题,请参考以下文章