2016-07-28 23 views
2

如果以前的页面内容仅在页面高度的60%以上结束,我需要在XSL-FO中插入分页符。例如,如果页面'one'上的文本占据页面高度的30%,则下一部分的文本会放在此页面上继续前面的文本。否则,新页面将被创建。 在FOP中可能吗?XSL-FO分页符取决于前一页的填满程度

+0

我没有看到任何方式来做到这一点。取决于页面的“丰满度”,FO处理器无法有条件地添加分页符。它需要1)以某种方式测量“丰满度”,2)将该信息反馈给处理器。这种机制在XSL-FO中不存在。 – mzjn

+1

我不知道这样做的方式,但不会分享@ mzjn的悲观主义。这个问题出现在xsl fo处理器中,例如就像在段落的最后一行之前避免分页符一样 - 在这种情况下,如果超过60%的填充量,就必须有一个打破奖励(尽管这显然不会是一个确切的限制) –

+0

@mzjn是正确。 XSL FO作为一个规范,大多数处理器并不是基于我身后的东西而被设计为“后视”或更适当的“更改格式”。有一些例外的脚注会改变页面上的内容(当然这可能会将引用脚注的内容移出页面)......但这些都是众所周知的。OP需要的不是XSL FO产品的核心,但可以根据需要进行编程,从而大大降低性能。 –

回答

2

简短的答案是你不能。 XSL FO和相应的格式化程序是为批量操作而设计的,不会执行前瞻(或后台)操作来作出决定,特别是如果这些决定取决于页面位置。在正常的批量格式化操作中,您必须将思考过程限制在应该一起保存的内容以及不应该保存的内容。当你开始思考“如果内容超过页面的X%,我希望有条件的页面中断”,那么你就错过了这些产品,并且“开箱即用”的产品没有按照这种要求设计。对于多通道格式化引擎,这些通常是非常慢的要求。

您可以完成您的任务,但只能通过集成到流程中的自定义编程完成。你可以调查更多的地方,如这个链接,其中一些人正在扩展在格式化过程中与格式化程序交互的能力:https://www.w3.org/community/ppl/wiki/XSLTExtensions

恕我直言,如果你想要一个解决方案执行那么你需要做出决定如何适应内容提前,而不是试图做的事情,取决于“我走了多少页”。

+2

2013年的会议文件[“XSL-FO格式化决策”](http://www.balisage.net/Proceedings/vol10/print/Graham01/BalisageVol10-Graham01.html)可能会引起人们的兴趣。摘要:“XSL-FO有一个很好的线性处理模型,但它经常需要根据格式化输出的大小来决定格式化输出中的内容,并且定义的XSL 1.1不要让你这样做,本文着眼于如何在XSL-FO处理当中以及未来可能的发展中做出这样的决策。“ – mzjn

+0

+! @mzjn肯定。我读过那篇论文。它是决定什么是真正适用于熄灯格式的问题,以及是否需要将这些问题带回到传统的交互式实用格式化程序中。他们需要与否?它肯定有“案例”,但是它有很大的“市场”。这是真实的情况。 –

1

您可以尝试将page-sequence-master与组合的simple-page-master一起使用。

例1(与页脚播放):

<fo:simple-page-master master-name="a4_rest" page-width="21cm" page-height="297mm" margin-top="{$page_margin_top}" margin-left="{$page_margin_left}" margin-right="{$page_margin_right}" margin-bottom="{$page_margin_bottom}"> 
    <fo:region-body/> 
</fo:simple-page-master> 
<fo:simple-page-master master-name="a4_footer" page-width="21cm" page-height="297mm" margin-top="{$page_margin_top}" margin-left="{$page_margin_left}" margin-right="{$page_margin_right}" margin-bottom="{$page_margin_bottom}"> 
    <fo:region-body margin-bottom="{$footer_distance}"/> 
    <fo:region-after extent="{$footer_distance}"/> 
</fo:simple-page-master> 

<fo:page-sequence-master master-name="firstPage60Percent"> 
    <fo:repeatable-page-master-alternatives> 
     <fo:conditional-page-master-reference page-position="first" master-reference="a4_footer"/> 
     <fo:conditional-page-master-reference page-position="any" master-reference="a4_rest"/> 
    </fo:repeatable-page-master-alternatives> 
</fo:page-sequence-master> 

您需要使用主基准页面序列= “firstPage60Percent” 选项。 所以,你需要设置下面名为“a4_footer”的简单页面主选项:

集footer_distance至30%-page余裕底部

或者

设置页面与容限底部至30%-footer_distance。

和瞧。

但是,你下一节是什么?在块容器上,您可以使用保持在一起=“始终”或“页内”选项,因此如果此页面上没有更多空间,它可以放到下一页。等我不知道你的文件。需要更多的信息,如果你不能解决这个问题。