为什么当一个地区出现时,region-start从页面顶部开始?

时间:2013-02-04 17:08:05

标签: xsl-fo apache-fop

根据Formatting Object documentation区域 - 开始(身体左侧的区域)在区域之前(标题)和区域之后(页脚)之间跨越,但当我使用FOP(v1.1)生成PDF时,区域开始将从页面顶部开始,并将区域向前推到右侧。

那么,是否有任何属性或任何使得生成器将区域开始放置在 区域之前的区域?

以下是一些示例代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
            <fo:simple-page-master master-name="A4-cover"
                page-width="210mm" page-height="297mm" margin="12mm">
                <fo:region-body margin-top="60mm" margin-left="85mm" />
                <fo:region-before extent="55mm" />
                <fo:region-start extent="80mm" />
            </fo:simple-page-master>
        </fo:layout-master-set>

        <fo:page-sequence master-reference="A4-cover">
            <fo:static-content flow-name="xsl-region-before">
                <fo:block background-color="blue">
                    Before area
                </fo:block>
            </fo:static-content>

            <fo:static-content flow-name="xsl-region-start">
                <fo:block background-color="red">
                    Start area
                </fo:block>
            </fo:static-content>

            <fo:flow flow-name="xsl-region-body">
                <fo:block background-color="green">
                    Body area
                </fo:block>
            </fo:flow>
        </fo:page-sequence>
    </fo:root>
</xsl:template>
</xsl:stylesheet>   

1 个答案:

答案 0 :(得分:3)

首先,我认为它应该按照您的预期默认工作。

但事实证明,必须在precedence="true"上设置region-before才能获得所需行为(阻止region-start延伸到角落)。见http://www.w3.org/TR/xsl11/#precedence

在XSL-FO规范中没有明确说明,但据我所知,precedence仅适用于region-beforeregion-after

这是一个邮件列表主题,讨论了主题:http://apache-fop.1065347.n5.nabble.com/page-layout-bug-td8766.html