Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSL-FO分页符取决于上一页的完整性_Xsl Fo_Apache Fop - Fatal编程技术网

XSL-FO分页符取决于上一页的完整性

XSL-FO分页符取决于上一页的完整性,xsl-fo,apache-fop,Xsl Fo,Apache Fop,如果上一页内容仅在页面高度的60%以上结束,我需要在XSL-FO中插入分页符。例如,如果“一”页上的文本占页面高度的30%,则下一节的文本将在上一节文本的基础上继续显示在本页上。否则,将创建新页面。 在FOP中是否可能?简单的回答是你不能。XSL-FO和相应的格式化程序是为批处理操作而设计的,而不是为了做出决策而执行先行(或后视)操作,特别是当这些决策取决于页面位置时。在正常的批处理格式化操作中,您必须将您的思维过程限制在哪些内容应该放在一起,哪些内容不应该放在一起。当你开始思考“如果内容超过页

如果上一页内容仅在页面高度的60%以上结束,我需要在XSL-FO中插入分页符。例如,如果“一”页上的文本占页面高度的30%,则下一节的文本将在上一节文本的基础上继续显示在本页上。否则,将创建新页面。
在FOP中是否可能?

简单的回答是你不能。XSL-FO和相应的格式化程序是为批处理操作而设计的,而不是为了做出决策而执行先行(或后视)操作,特别是当这些决策取决于页面位置时。在正常的批处理格式化操作中,您必须将您的思维过程限制在哪些内容应该放在一起,哪些内容不应该放在一起。当你开始思考“如果内容超过页面的X%,我希望有条件地在这里分页符”时,你就偏离了轨道,“开箱即用”的产品并不是按照这样的要求设计的。这些通常是多过程格式化引擎的要求,而多过程格式化引擎在本质上要慢得多

您可以完成任务,但只能通过集成到流程中的自定义编程来完成。您可以在以下链接中了解更多信息,其中一些人正在扩展格式化过程中与格式化程序交互的能力:


依我看,如果你想要一个有效的解决方案,那么你需要提前决定如何适应内容,而不是试图做一些依赖于“我在页面上走了多远”的事情。

你可以尝试将页面序列母版与组合的简单页面母版一起使用

示例1(使用页脚):


您需要在页面顺序中使用master reference=“firstPage60Percent”选项。 因此,您需要在名为“a4_footer”的简单页面母版中设置以下选项:

将页脚距离设置为30%-页边距底部

将页边距底部设置为30%-页脚距离


但是,你的下一部分是什么?在块容器上,您可以使用keep-together=“always”或“inthepage”选项,这样,如果此页面上没有更多空间,它就可以放到下一页。等等,我不知道你的文件。如果无法解决此问题,则需要更多信息。

AH格式化程序有一个
axf:keep together in dimension
扩展名,用于指定将应用“keep together”的高度。(见附件)

如果当前页面上的可用高度小于40%,则此类操作应强制分页符:

<fo:block keep-together.within-page="always" axf:keep-together-within-dimension="40vh">


请参见“XSL-FO示例”页面中的“限制keep together应用的高度”示例,位于

,我看不到任何方法可以做到这一点。FO处理器不能根据页面的“完整性”有条件地添加分页符。这需要1)以某种方式测量“满度”,2)将此信息反馈给处理器。XSL-FO中不存在这样的机制,我不知道如何做到这一点,但不会像@mzjn那样悲观。这个问题在xsl fo处理器内部,例如,以同样的方式避免段落最后一行之前出现分页符或类似情况-在这种情况下,如果超过60%的填充率,则必须有一个分页符奖励(尽管这显然永远不会是一个精确的限制)@mzjn是正确的。XSL FO作为一种规范,大多数处理器的设计不是为了“向后看”,也不是为了根据我身后的内容更恰当地“更改格式”。也有一些例外情况,比如脚注会改变页面上的内容(当然,这可能会将引用脚注的内容移出页面)。。。但这些都是众所周知的。OP想要的不是XSL FO产品的核心,而是可以根据需要进行编程,从而大大牺牲性能。2013年的会议论文可能会引起兴趣。摘要:“XSL-FO有一个非常线性的处理模型,它很好地发挥了作用,但通常需要根据格式化输出的大小来决定格式化输出中的内容,而XSL 1.1的定义不允许您这样做。本文介绍了在XSL-FO处理中需要做些什么,以及未来可能的发展。"+! @mzjn是肯定的。我读过那份报纸。这是一个决定什么才是真正适合熄灯格式化的问题,以及是否需要将其恢复到传统的交互式、动手式格式化程序中。是否需要它们?当然,它有“案例”,但它是否有重要的“市场”。这是事实。
<fo:block keep-together.within-page="always" axf:keep-together-within-dimension="40vh">