Почему регион-начало начинается вверху страницы, когда присутствует регион-до?

Согласно документации по объекту форматирования регион-начало (область слева от тела) охватывает между регион-до (заголовок) и регион-после (нижний колонтитул), но когда я создаю PDF с FOP (v1.1) region-start будет начинаться с верхней части страницы и будет толкать регион-перед вправо.

Итак, есть ли какой-либо атрибут или что-то еще, что заставляет генератор размещать регион-начало ниже региона-перед?

Вот пример кода:

<?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>   

person re404    schedule 04.02.2013    source источник


Ответы (1)


Сначала я подумал, что по умолчанию он должен работать так, как вы ожидаете.

Но оказывается, что precedence="true" должен быть установлен на region-before, чтобы получить желаемое поведение (предотвратить расширение region-start в угол). См. http://www.w3.org/TR/xsl11/#precedence.

Это не очень четко указано в спецификации XSL-FO, но насколько я понимаю, precedence относится только к region-before и region-after.

Вот ветка списка рассылки с обсуждением этой темы: http://apache-fop.1065347.n5.nabble.com/page-layout-bug-td8766.html.

person mzjn    schedule 06.02.2013
comment
Это сработало, большое спасибо! Я просто добавил атрибут в объявлении region-before к: <fo:region-before extent="55mm" precedence="true" />. - person re404; 07.02.2013